]> sigrok.org Git - libsigrok.git/commitdiff
input/saleae: reduce the format match routine's greed
authorGerhard Sittig <redacted>
Sun, 14 Jun 2020 12:26:57 +0000 (14:26 +0200)
committerGerhard Sittig <redacted>
Fri, 24 Jul 2020 16:40:38 +0000 (18:40 +0200)
Only return OK from the format match routine when either of the tested
conditions reliably matched. Return an error in all other cases. This
avoids that the Saleae module is "winning a contest" due to even the
weakest condition, and then is not able to handle the input file.

src/input/saleae.c

index 05de3e3ea5eddae271e6f86213392f5f79db9de9..d16b96c483f7050ac5532d0da8a7f73a52b3b6ea 100644 (file)
@@ -883,11 +883,14 @@ static int format_match(GHashTable *metadata, unsigned int *confidence)
        static const char *zip_ext = ".sal";
        static const char *bin_ext = ".bin";
 
+       gboolean matched;
        const char *fn;
        size_t fn_len, ext_len;
        const char *ext_pos;
        GString *buf;
 
+       matched = FALSE;
+
        /* Weak match on the filename (when available). */
        fn = g_hash_table_lookup(metadata, GINT_TO_POINTER(SR_INPUT_META_FILENAME));
        if (fn && *fn) {
@@ -895,13 +898,16 @@ static int format_match(GHashTable *metadata, unsigned int *confidence)
                ext_len = strlen(zip_ext);
                ext_pos = &fn[fn_len - ext_len];
                if (fn_len >= ext_len && g_ascii_strcasecmp(ext_pos, zip_ext) == 0) {
-                       if (SALEAE_WITH_SAL_SUPPORT)
+                       if (SALEAE_WITH_SAL_SUPPORT) {
                                *confidence = 10;
+                               matched = TRUE;
+                       }
                }
                ext_len = strlen(bin_ext);
                ext_pos = &fn[fn_len - ext_len];
                if (fn_len >= ext_len && g_ascii_strcasecmp(ext_pos, bin_ext) == 0) {
                        *confidence = 50;
+                       matched = TRUE;
                }
        }
 
@@ -913,13 +919,14 @@ static int format_match(GHashTable *metadata, unsigned int *confidence)
        case FMT_LOGIC2_DIGITAL:
        case FMT_LOGIC2_ANALOG:
                *confidence = 1;
+               matched = TRUE;
                break;
        default:
                /* EMPTY */
                break;
        }
 
-       return SR_OK;
+       return matched ? SR_OK : SR_ERR_DATA;
 }
 
 static int init(struct sr_input *in, GHashTable *options)