cgiparse.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:2k
源码类别:

DSP编程

开发平台:

C/C++

  1. //--------------------------------------------------------------------------
  2. // IP Stack CGI Demonstration Program
  3. //--------------------------------------------------------------------------
  4. // cgiparse.c
  5. //
  6. // Basic CGI Functions
  7. //
  8. // Author: Michael A. Denio
  9. //         Adam K. Keys
  10. //
  11. // Copyright 2001 by Texas Instruments Inc.
  12. //-------------------------------------------------------------------------
  13. //#include "c:tic6000ndkincnetmain.h" /*change*/
  14. #include "netmain.h" /*change*/
  15. //
  16. // cgiParseVars()
  17. //
  18. // Reads input from a CGI post operation in pointed to by PostIn and
  19. // returns in sequence a pointer the name and then the value of each
  20. // post entry. This function modifies the data in PostIn. It also
  21. // returns the current parsing position in the variable pParseIndex.
  22. // The parse index must be set to 0 on initial call.
  23. //
  24. char *cgiParseVars(char PostIn[], int *pParseIndex )
  25. {
  26.   int  out;
  27.   int  in;
  28.   char hexch;
  29.   char hexval[3];
  30.   int start;
  31.   char ch;
  32.   // Get the current parse index. On the first call, it
  33.   // must be zero.
  34.   in = *pParseIndex;
  35.   hexval[2] = '';
  36.   if( in == 0 )
  37.     out = 0;
  38.   else if( in == -1 )
  39.     return NULL;
  40.   else
  41.     out = ++in;
  42.   start = in;
  43.   while (((ch = PostIn[in]) != '=') && (ch != '&') && (ch != ''))
  44.   {
  45.     if (ch == '+')
  46.       PostIn[out++] = ' ';
  47.     else if (ch == '%')
  48.     {
  49.       hexval[0] = PostIn[++in];
  50.       hexval[1] = PostIn[++in];
  51.       hexch = (char) strtol(hexval, NULL, 16);
  52.       PostIn[out++] = hexch;
  53.      }
  54.      else
  55.       PostIn[out++] = ch;
  56.     in++;
  57.   }
  58.   // If we got to the end of the string, set the parse index to -1
  59.   if( ch == '' )
  60.       in = -1;
  61.   // Null terminate the result string
  62.   PostIn[out++] = '';
  63.   // Save the value of the current parse index
  64.   *pParseIndex = in;
  65.   // Return a pointer to the start of the result string
  66.   return (&PostIn[start]);
  67. }