C/Field validation
From Attie's Wiki
(Redirected from Field validation)
This is untested / pseudo code
int valCategory(char *fieldName, char *fieldValue) { if (!strcmp(fieldValue, "funny")) { return 0; } return 1; } int valName(char *fieldName, char *fieldValue) { if (!strcmp(fieldValue, "WiFi")) { return 0; } else if (!strcmp(fieldValue, "MyAP")) { return 0; } return 1; } int valChannel(char *fieldName, char *fieldValue) { int t; if (!sscanf(fieldValue, "%d", &t)) { return 1; } if (t >= 1 && t <= 14) { return 0; } return 1; } int valIP(char *fieldName, char *fieldValue) { int t; if (!sscanf(fieldValue, "%d", &t)) { return 1; } if (t >= 0 && t <= 255) { return 0; } return 1; } struct { char *fieldName; int (*checkFunction)(char *fieldName, char *fieldVaule); char *defaultValue; } checkMap[] = { { "category", valCategory, "funny" }, { "name", valName, "MyAP" }, { "channel", valChannel, "11" }, { "lanIP1", valIP, "192" }, { "lanIP2", valIP, "168" }, { "lanIP3", valIP, "1" }, { "lanIP4", valIP, "1" }, { NULL, NULL, NULL } }; /* return 0 = valid return 1 = invalid return -1 = untested (field not in checkMap[]) */ int validateField(char *fieldName, char **fieldValue) { int i; void *p, *q; for (i = 0; checkMap[i].fieldName != NULL; i++) { if (!strcasecmp(fieldName, checkMap[i].fieldName)) { if (!checkMap[i].checkFunction(fieldName, *fieldValue)) { return 0; } q = malloc(sizeof(char) * (strlen(checkMap[i].defaultValue) + 1)); strcpy(q, checkMap[i].defaultValue); p = *fieldValue; *fieldValue = q; free(p); return 1; } } return -1; }