| 90 | } |
| 91 | |
| 92 | static void usershell(void) { |
| 93 | char *cmdline = NULL, *cur; |
| 94 | int nbargs; |
| 95 | char command[100]; |
| 96 | char arg[400]; |
| 97 | char *argv[20]; |
| 98 | int i, ret; |
| 99 | xmlChar *ans; |
| 100 | |
| 101 | while (1) { |
| 102 | cmdline = xmlShellReadline("> "); |
| 103 | if (cmdline == NULL) |
| 104 | return; |
| 105 | |
| 106 | /* |
| 107 | * Parse the command itself |
| 108 | */ |
| 109 | cur = cmdline; |
| 110 | nbargs = 0; |
| 111 | while ((*cur == ' ') || (*cur == '\t')) cur++; |
| 112 | i = 0; |
| 113 | while ((*cur != ' ') && (*cur != '\t') && |
| 114 | (*cur != '\n') && (*cur != '\r')) { |
| 115 | if (*cur == 0) |
| 116 | break; |
| 117 | command[i++] = *cur++; |
| 118 | } |
| 119 | command[i] = 0; |
| 120 | if (i == 0) { |
| 121 | free(cmdline); |
| 122 | continue; |
| 123 | } |
| 124 | |
| 125 | /* |
| 126 | * Parse the argument string |
| 127 | */ |
| 128 | memset(arg, 0, sizeof(arg)); |
| 129 | while ((*cur == ' ') || (*cur == '\t')) cur++; |
| 130 | i = 0; |
| 131 | while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) { |
| 132 | if (*cur == 0) |
| 133 | break; |
| 134 | arg[i++] = *cur++; |
| 135 | } |
| 136 | arg[i] = 0; |
| 137 | |
| 138 | /* |
| 139 | * Parse the arguments |
| 140 | */ |
| 141 | i = 0; |
| 142 | nbargs = 0; |
| 143 | cur = arg; |
| 144 | memset(argv, 0, sizeof(argv)); |
| 145 | while (*cur != 0) { |
| 146 | while ((*cur == ' ') || (*cur == '\t')) cur++; |
| 147 | if (*cur == '\'') { |
| 148 | cur++; |
| 149 | argv[i] = cur; |
no test coverage detected