Guest User

Test functions

a guest
Aug 26th, 2020
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.96 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5.  
  6. size_t count(char **array);
  7. char **explode(char *delimeter, char *string);
  8.  
  9. void GET_INIT(void);
  10. char *GET_VALUE(char *arg);
  11.  
  12. char ***GET_ARGS;
  13.  
  14. int main(int argc, char *argv[])
  15. {
  16.     GET_INIT();
  17.  
  18.     printf("%s\n", GET_VALUE("a"));
  19.  
  20.     return 0;
  21. }
  22.  
  23. char **explode(char *delimeter, char *string)
  24. {
  25.     char *token;
  26.     size_t size = 2;
  27.     size_t str_size = 0;
  28.     size_t position = 0;
  29.     char **array = malloc(sizeof(char *) * size);
  30.  
  31.     if (array == NULL)
  32.         exit(EXIT_FAILURE);
  33.  
  34.     if (strlen(string) != 0)
  35.     {
  36.         while (token = strtok_r(string, delimeter, &string))
  37.         {
  38.             array[position] = malloc(str_size);
  39.             if (array[position] == NULL)
  40.                 exit(EXIT_FAILURE);
  41.             strcpy(array[position], token);
  42.             position++;
  43.             size++;
  44.             array = realloc(array, sizeof(char *) * size);
  45.             if (array == NULL)
  46.                 exit(EXIT_FAILURE);
  47.         }
  48.     }
  49.  
  50.     array[position] = NULL;
  51.  
  52.     return array;
  53. }
  54.  
  55. size_t count(char **array)
  56. {
  57.     size_t i = 0;
  58.     while (array[i] != NULL)
  59.         i++;
  60.  
  61.     return i;
  62. }
  63.  
  64. void GET_INIT(void)
  65. {
  66.     char **array = explode("&", getenv("QUERY_STRING"));
  67.     char **tmp_array = NULL;
  68.     size_t size = count(array);
  69.     int pos = 0;
  70.  
  71.     GET_ARGS = malloc(size + 1);
  72.  
  73.     if (GET_ARGS == NULL)
  74.         exit(EXIT_FAILURE);
  75.  
  76.     for (pos; pos < size; pos++)
  77.     {
  78.         tmp_array = explode("=", array[pos]);
  79.         if (tmp_array != NULL)
  80.         {
  81.             GET_ARGS[pos] = malloc(sizeof(char *) * 2);
  82.             if (GET_ARGS[pos] == NULL)
  83.                 exit(EXIT_FAILURE);
  84.  
  85.             if (tmp_array[0] == NULL)
  86.             {
  87.                 GET_ARGS[pos][0] = NULL;
  88.             }
  89.             else
  90.             {
  91.                 GET_ARGS[pos][0] = malloc(strlen(tmp_array[0]) + 1);
  92.                 if (GET_ARGS[pos][0] == NULL)
  93.                     exit(EXIT_FAILURE);
  94.                 strcpy(GET_ARGS[pos][0], tmp_array[0]);
  95.             }
  96.  
  97.             if (tmp_array[1] == NULL)
  98.             {
  99.                 GET_ARGS[pos][1] = NULL;
  100.             }
  101.             else
  102.             {
  103.                 GET_ARGS[pos][1] = malloc(strlen(tmp_array[1]) + 1);
  104.                 if (GET_ARGS[pos][1] == NULL)
  105.                     exit(EXIT_FAILURE);
  106.                 strcpy(GET_ARGS[pos][1], tmp_array[1]);
  107.             }
  108.         }
  109.     }
  110.  
  111.     GET_ARGS[pos] = NULL;
  112.  
  113.     if (tmp_array != NULL)
  114.     {
  115.         free(tmp_array);
  116.     }
  117.     free(array);
  118. }
  119.  
  120. char *GET_VALUE(char *arg)
  121. {
  122.     for (int i = 0; GET_ARGS[i] != NULL; i++)
  123.     {
  124.         if (!strcmp(GET_ARGS[i][0], arg))
  125.         {
  126.             if (GET_ARGS[i][1] == NULL)
  127.             {
  128.                 return NULL;
  129.             }
  130.             else
  131.             {
  132.                 return GET_ARGS[i][1];
  133.             }
  134.         }
  135.     }
  136.  
  137.     return NULL;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment