2
0
Эх сурвалжийг харах

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 1 жил өмнө
parent
commit
0ff0d2c8d2

+ 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
esp32/output/max80.ino.bin


BIN
fpga/output/max80.fw


BIN
fpga/output/v1.fw


BIN
fpga/output/v2.fw