C/Field validation

From Attie's Wiki
(Redirected from Field validation)
Jump to: navigation, search

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;
}
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox