Explorar o código

sysvar.c: bsearch() needs an extra level of indirection

bsearch() will call its comparison functions with pointers to the
string pointers, not the string pointers themselves.
H. Peter Anvin hai 1 ano
pai
achega
0ff0d2c8d2
Modificáronse 5 ficheiros con 8 adicións e 1 borrados
  1. 8 1
      esp32/max80/sysvar.c
  2. BIN=BIN
      esp32/output/max80.ino.bin
  3. BIN=BIN
      fpga/output/max80.fw
  4. BIN=BIN
      fpga/output/v1.fw
  5. BIN=BIN
      fpga/output/v2.fw

+ 8 - 1
esp32/max80/sysvar.c

@@ -359,6 +359,13 @@ bool setvar_fromstr(size_t var, const char *str)
 
 /* --- Find the index of a specific variable --- */
 
+static int string_ptr_compare(const void *a, const void *b)
+{
+    const char * const *aa = a;
+    const char * const *bb = b;
+    return strcmp(*aa, *bb);
+}
+
 size_t sysvar_find(size_t ns, const char *name)
 {
     if (ns >= (size_t)sysvar_nscount)
@@ -369,7 +376,7 @@ size_t sysvar_find(size_t ns, const char *name)
 
     varname = bsearch(name, sysvar_name + nsi->first,
 		      nsi->count, sizeof(const char *),
-		      (int (*)(const void *, const void *))strcmp);
+		      string_ptr_compare);
     if (!varname)
 	return 0;
 

BIN=BIN
esp32/output/max80.ino.bin


BIN=BIN
fpga/output/max80.fw


BIN=BIN
fpga/output/v1.fw


BIN=BIN
fpga/output/v2.fw