Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Friday, October 16, 2026

Diff for libplaton/platon/str/strcgi.c between version 1.2 and 1.3

version 1.2, 2003/04/21 23:51:36 version 1.3, 2003/04/22 14:22:53
Line 4 
Line 4 
   
 #include <platon/str/strcgi.h>  #include <platon/str/strcgi.h>
   
         char *  #define URLENCODE               (0)
 PLATON_FUNC(urlencode)(str)  #define RAWURLENCODE    (1)
   
           static char *
   PLATON_FUNC(urlencode_core)(str, mode)
         const char *str;          const char *str;
 {          const int mode;
   { /* {{{ */
         register int i, j, len, tmp_len;          register int i, j, len, tmp_len;
         char hex[] = "0123456789ABCDEF";          char hex[] = "0123456789ABCDEF";
         char *tmp;          char *tmp;
Line 21  PLATON_FUNC(urlencode)(str)
Line 25  PLATON_FUNC(urlencode)(str)
   
         for (i = 0, j = 0; i < len; i++, j++) {          for (i = 0, j = 0; i < len; i++, j++) {
                 tmp[j] = (char) str[i];                  tmp[j] = (char) str[i];
                 if (tmp[j] == ' ') {                  if (tmp[j] == ' ' && mode & RAWURLENCODE) {
                         tmp[j] = '+';                          tmp[j] = '+';
                 } else if (! isalnum(tmp[j]) && strchr("_-.", tmp[j]) == NULL) {                  } else if (! isalnum(tmp[j]) && strchr("_-.", tmp[j]) == NULL) {
                         tmp_len += 3;                          tmp_len += 3;
Line 38  PLATON_FUNC(urlencode)(str)
Line 42  PLATON_FUNC(urlencode)(str)
   
         tmp[j] = '\0';          tmp[j] = '\0';
         return tmp;          return tmp;
 }  } /* }}} */
   
         char *          static char *
 PLATON_FUNC(urldecode)(str)  PLATON_FUNC(urldecode_core)(str, mode)
         const char *str;          const char *str;
 {          const int mode;
   { /* {{{ */
         register int i, pos, len;          register int i, pos, len;
         char *tmp;          char *tmp;
   
Line 92  PLATON_FUNC(urldecode)(str)
Line 97  PLATON_FUNC(urldecode)(str)
   
                 if (str[i] == '%') {                  if (str[i] == '%') {
                         tmp[pos++] = (hextable[(int) str[++i]] << 4) + hextable[(int) str[++i]];                          tmp[pos++] = (hextable[(int) str[++i]] << 4) + hextable[(int) str[++i]];
                 } else if (str[i] == '+') {                  } else if (str[i] == '+' && mode & RAWURLENCODE) {
                         tmp[pos++] = ' ';                          tmp[pos++] = ' ';
                 } else {                  } else {
                         tmp[pos++] = str[i];                          tmp[pos++] = str[i];
Line 100  PLATON_FUNC(urldecode)(str)
Line 105  PLATON_FUNC(urldecode)(str)
         }          }
         tmp[len] = '\0';          tmp[len] = '\0';
         return tmp;          return tmp;
 }  } /* }}} */
   
           char *
   PLATON_FUNC(urlencode)(str)
           const char *str;
   { /* {{{ */
           return urlencode_core(str, URLENCODE);
   } /* }}} */
   
           char *
   PLATON_FUNC(urldecode)(str)
           const char *str;
   { /* {{{ */
           return urldecode_core(str, URLENCODE);
   } /* }}} */
   
           char *
   PLATON_FUNC(rawurlencode)(str)
           const char *str;
   { /* {{{ */
           return urlencode_core(str, RAWURLENCODE);
   } /* }}} */
   
           char *
   PLATON_FUNC(rawurldecode)(str)
           const char *str;
   { /* {{{ */
           return urldecode_core(str, RAWURLENCODE);
   } /* }}} */
   
         char *          char *
 PLATON_FUNC(addnslashes)(s, n)  PLATON_FUNC(addnslashes)(s, n)
         const char *s;          const char *s;
         int n;          int n;
 {  { /* {{{ */
         char *tmp;          char *tmp;
         int len, j = 0;          int len, j = 0;
   
Line 133  PLATON_FUNC(addnslashes)(s, n)
Line 166  PLATON_FUNC(addnslashes)(s, n)
         }          }
         tmp[j] = '\0';          tmp[j] = '\0';
         return tmp;          return tmp;
 }  } /* }}} */
   
         char *          char *
 PLATON_FUNC(stripnslashes)(s, n)  PLATON_FUNC(stripnslashes)(s, n)
         const char *s;          const char *s;
         int n;          int n;
 {  { /* {{{ */
         int j = 0;          int j = 0;
         char *tmp;          char *tmp;
   
Line 157  PLATON_FUNC(stripnslashes)(s, n)
Line 190  PLATON_FUNC(stripnslashes)(s, n)
         }          }
         tmp[j] = '\0';          tmp[j] = '\0';
         return tmp;          return tmp;
 }  } /* }}} */
   
 #if defined(SELF) || defined(SELFTEST) || defined(SELF_STRCGI)  #if defined(SELF) || defined(SELFTEST) || defined(SELF_STRCGI) /* {{{ */
   
 #include <stdio.h>  #include <stdio.h>
   
 #define TEST_urlencode          "&bar'foo'&baz[ ]"  #define TEST_urlencode          "&bar'foo'&baz[ ]"
 #define TEST_urldecode          (s1)  
 #define TEST_addslashes         "The \"string\" wo/backslash (\\)."  #define TEST_addslashes         "The \"string\" wo/backslash (\\)."
 #define TEST_stripslashes       (s1)  
   
         int          int
 main(argc, argv)  main(argc, argv)
Line 178  main(argc, argv)
Line 209  main(argc, argv)
         s1 = urlencode(TEST_urlencode);          s1 = urlencode(TEST_urlencode);
         printf("urlencode(\"%s\") = \"%s\"\n", TEST_urlencode, s1);          printf("urlencode(\"%s\") = \"%s\"\n", TEST_urlencode, s1);
         s2 = urldecode(TEST_urlencode);          s2 = urldecode(TEST_urlencode);
         printf("urldecode(\"%s\") = \"%s\"\n", TEST_urldecode, s2);          printf("urldecode(\"%s\") = \"%s\"\n", s1, s2);
           s1 = rawurlencode(s2);
           printf("rawurlencode(\"%s\") = \"%s\"\n", s2, s1);
           s2 = rawurldecode(s1);
           printf("rawurldecode(\"%s\") = \"%s\"\n", s1, s2);
         free(s2);          free(s2);
         free(s1);          free(s1);
   
         s1 = addslashes(TEST_addslashes);          s1 = addslashes(TEST_addslashes);
         printf("addslashes(\"%s\") = \"%s\"\n", TEST_addslashes, s1);          printf("addslashes(\"%s\") = \"%s\"\n", TEST_addslashes, s1);
         s2 = stripslashes(TEST_stripslashes);          s2 = stripslashes(s1);
         printf("stripslashes(\"%s\") = \"%s\"\n", TEST_stripslashes, s2);          printf("stripslashes(\"%s\") = \"%s\"\n", s1, s2);
         free(s2);          free(s2);
         free(s1);          free(s1);
   
         return 0;          return 0;
 }  }
   
 #endif /* #if defined(SELF) || defined(SELFTEST) || defined(SELF_STRCGI) */  #endif /* #if defined(SELF) || defined(SELFTEST) || defined(SELF_STRCGI) */ /* }}} */
   
   /* Modeline for ViM {{{
    * vim: set ts=4:
    * vim600: fdm=marker fdl=0 fdc=0:
    * }}} */
   

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top