Subversion Repositories Kolibri OS

Rev

Rev 3245 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. /// ===========================================================
  3.  
  4. int parameters_prepare(char *param, char* argv[])
  5. {
  6.  
  7. int i, param_len;
  8. int argc = 1;
  9. int quote = 0;
  10. int argv_len;
  11.  
  12. param_len = strlen(param);
  13. if ( param_len == 0 )
  14.    return 0;
  15.  
  16. argv[0] = (char*) malloc(4096);
  17.  
  18. argv_len = 0;
  19. for (i = 0; i < param_len; i++)
  20.     {
  21.     switch (param[i])
  22.            {
  23.            case '"':
  24.                 if (quote == 0)
  25.                     quote = 1;
  26.                 else
  27.                     {
  28.                     quote = 0;
  29.                     argv[argc-1][argv_len] = '\0';
  30.                     argc++;
  31.                     argv[argc-1] = (char*) malloc(4096);
  32.                     argv[argc-1][argv_len] = '\0';
  33.                     argv_len = 0;
  34.                     }
  35.                 break;
  36.  
  37.            case 9:
  38.            case 32:
  39.                 if (quote == 0)
  40.                    {
  41.                    if ( ( param[i+1] != 32) || ( param[i+1] != 9) )
  42.                       {
  43.                       if (argv_len != 0)
  44.                          {
  45.                          argv[argc-1][argv_len] = '\0';
  46.                          argc++;
  47.                          argv[argc-1] = (char*) malloc(4096);
  48.                          argv[argc-1][argv_len] = '\0';
  49.                          argv_len = 0;
  50.                          }
  51.                       }
  52.                    }
  53.                    else
  54.                     {
  55.                     argv[argc-1][argv_len] = param[i];
  56.                     argv_len++;
  57.                     }
  58.  
  59.                    break;
  60.  
  61.            default:
  62.                    argv[argc-1][argv_len] = param[i];
  63.                    argv_len++;
  64.                    break;
  65.            };
  66.     }
  67.  
  68. argv[argc-1][argv_len] = '\0';
  69.  
  70. if ( strlen(argv[argc-1]) == 0 )
  71.    {
  72.    free(argv[argc-1]);
  73.    argc--;
  74.    }
  75.  
  76. return argc;
  77. }
  78.  
  79. /// ===========================================================
  80.  
  81. void parameters_free(int argc, char* argv[])
  82. {
  83.  
  84. int i;
  85.  
  86. for (i = 0; i < argc; i++)
  87.     free(argv[i]);
  88.  
  89. }
  90.  
  91. /// ===========================================================
  92.  
  93.