C指针灵活应用集锦

2013-01-01 14:57:42 · 作者: · 浏览: 416

  解析CGI字符串:

  NET=0&SSID=linux&KEY=&WIP1=192&WIP2=168&WIP3=144&WIP4=010&MASK1=255&MASK2=255&MASK3=255&MASK4=000&GW1=192&GW2=168&GW3=001&GW4=001&DNS1=202&DNS2=114&DNS3=134&DNS4=133&WMAC0=00&WMAC1=DF&WMAC2=24&WMAC3=6C&WMAC4=74&WMAC5=96&OK=%B1%A3%B4%E6

  static int extract_uri_parameters(struct http_request *hs, char *params)

  {

  char *pair = NULL;

  char *equals = NULL;

  int loop;

  /* If we have no parameters at all, return immediately. */

  if(!params || (params[0] == '\0')) {

  return(0);

  }

  if (hs->postfile) {

  loop = 1;

  hs->param_vals[0] = params;

  }

  else {

  /* Get a pointer to our first parameter */

  pair = params;

  for(loop = 0; (loop < MAX_CGI_PARAMETERS) && pair; loop++) {

  /* Save the name of the parameter */

  hs->params[loop] = pair;

  /* Remember the start of this name=value pair */

  equals = pair;

  pair = strchr(pair, '&');

  if(pair) {

  *pair = '\0';

  pair++;

  }

  equals = strchr(equals, '=');

  if(equals) {

  *equals = '\0';

  hs->param_vals[loop] = equals + 1;

  } else {

  hs->param_vals[loop] = NULL;

  }

  //DEBUGP("CGI para %d: %s = %s\n", loop, hs->params[loop], hs->param_vals[loop]);

  }

  }

  return(loop);

  }