浏览代码

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 年之前
父节点
当前提交
0ff0d2c8d2
共有 5 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      esp32/max80/sysvar.c
  2. 二进制
      esp32/output/max80.ino.bin
  3. 二进制
      fpga/output/max80.fw
  4. 二进制
      fpga/output/v1.fw
  5. 二进制
      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;
 

二进制
esp32/output/max80.ino.bin


二进制
fpga/output/max80.fw


二进制
fpga/output/v1.fw


二进制
fpga/output/v2.fw