C 配置文件解析函数 cfg_conv_value() - 将字符串转换为不同类型的值
{"title":"int cfg_conv_value(char *val_str, void *addr, u_int32_t maxlen, u_int8_t type)\n{\n\t int val_len = 0;\n\n\t if (val_str == NULL || addr == NULL || maxlen == 0)\n\t\t goto err;\n\n\t val_len = strlen(val_str);\n\n\t switch (type)\n\t {\n\t\t case CFG_TYPE_STR:\n\t\t {\n\t\t\t if (val_len == 0)\n\t\t\t {\n\t\t\t\t *(char *)addr = 0;\n\t\t\t\t break;\n\t\t\t }\n\n\t\t\t v_strcpy(addr, maxlen, val_str);\n\t\t\t break;\n\t\t }\n\t\t case CFG_TYPE_LONG:\n\t\t {\n\t\t\t if (maxlen < sizeof(long int))\n\t\t\t\t goto err;\n\n\t\t\t if (val_len == 0)\n\t\t\t {\n\t\t\t\t *(long int *)addr = 0;\n\t\t\t\t break;\n\t\t\t }\n\n\t\t\t *(long int *)addr = strtol((const char *)val_str, NULL, 0);\n\t\t\t break;\n\t\t }\n\t\t case CFG_TYPE_ULONG:\n\t\t {\n\t\t\t if (maxlen < sizeof(unsigned long int))\n\t\t\t\t goto err;\n\n\t\t\t if (val_len == 0)\n\t\t\t {\n\t\t\t\t *(unsigned long int *)(addr) = 0;\n\t\t\t\t break;\n\t\t\t }\n\n\t\t\t *(unsigned long int *)(addr) = strtoul((const char *)val_str, NULL, 0);\n\t\t\t break;\n\t\t }\n\t\t case CFG_TYPE_YN:\n\t\t {\n\t\t\t if (val_len == 0)\n\t\t\t {\n\t\t\t\t *(char *)addr = 0;\n\t\t\t\t break;\n\t\t\t }\n\n\t\t\t if (!strcasecmp(val_str, "yes"))\n\t\t\t {\n\t\t\t\t *(char *)addr = 1;\n\t\t\t }\n\t\t\t else if (!strcasecmp(val_str, "no"))\n\t\t\t {\n\t\t\t\t *(char *)addr = 0;\n\t\t\t }\n\t\t\t else\n\t\t\t {\n\t\t\t\t goto err;\n\t\t\t }\n\n\t\t\t break;\n\t\t }\n\t\t default:\n\t\t\t goto err;\n\t }\n\n\t// ret:\n\t return 0;\n\nerr:\n\t return -1;\n}
原文地址: https://www.cveoy.top/t/topic/pWQX 著作权归作者所有。请勿转载和采集!