diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/devices.c | 44 | 
1 files changed, 33 insertions, 11 deletions
| diff --git a/modules/devices.c b/modules/devices.c index 92215df7..35ded54c 100644 --- a/modules/devices.c +++ b/modules/devices.c @@ -358,7 +358,7 @@ gchar *get_motherboard(void)      gchar *board_name, *board_vendor, *board_version;      gchar *product_name, *product_vendor, *product_version;      gchar *board_part = NULL, *product_part = NULL; -    int b = 0, p = 0, iv = 0; +    int b = 0, p = 0;      gchar *ret; @@ -374,8 +374,18 @@ gchar *get_motherboard(void)      product_version = dmi_get_str("system-version");      if (board_vendor && product_vendor && -        strcmp(board_vendor, product_vendor) == 0) -        iv = 1; +        strcmp(board_vendor, product_vendor) == 0) { +            /* ignore duplicate vendor */ +            g_free(product_vendor); +            product_vendor = NULL; +    } + +    if (board_name && product_name && +        strcmp(board_name, product_name) == 0) { +            /* ignore duplicate name */ +            g_free(product_name); +            product_name = NULL; +    }      if (board_name) b += 1;      if (board_vendor) b += 2; @@ -391,6 +401,12 @@ gchar *get_motherboard(void)          case 3: /* only name and vendor */              board_part = g_strdup_printf("%s %s", board_vendor, board_name);              break; +        case 4: /* only version? Seems unlikely */ +            board_part = g_strdup(board_version); +            break; +        case 5: /* only name and version? */ +            board_part = g_strdup_printf("%s %s", board_name, board_version); +            break;          case 6: /* only vendor and version (like lpereira's Thinkpad) */              board_part = g_strdup_printf("%s %s", board_vendor, board_version);              break; @@ -407,17 +423,23 @@ gchar *get_motherboard(void)          case 1: /* only name */              product_part = g_strdup(product_name);              break; +        case 2: /* only vendor */ +            product_part = g_strdup(product_vendor); +            break;          case 3: /* only name and vendor */ -            if (board_part && iv) -                product_part = g_strdup(product_name); -            else -                product_part = g_strdup_printf("%s %s", product_vendor, product_name); +            product_part = g_strdup_printf("%s %s", product_vendor, product_name); +            break; +        case 4: /* only version? Seems unlikely */ +            product_part = g_strdup(product_version); +            break; +        case 5: /* only name and version? */ +            product_part = g_strdup_printf("%s %s", product_name, product_version); +            break; +        case 6: /* only vendor and version? */ +            product_part = g_strdup_printf("%s %s", product_vendor, product_version);              break;          case 7: /* all */ -            if (board_part && iv) -                product_part = g_strdup_printf("%s %s", product_name, product_version); -            else -                product_part = g_strdup_printf("%s %s %s", product_vendor, product_name, product_version); +            product_part = g_strdup_printf("%s %s %s", product_vendor, product_name, product_version);              break;      } | 
