Subversion Repositories Kolibri OS

Rev

Rev 3268 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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