Revision 81beeec4

b/cmd.c
45 45
		      ((const cmdinfo_t *)b)->name);
46 46
}
47 47

  
48
void
49
add_command(
50
	const cmdinfo_t	*ci)
48
void add_command(const cmdinfo_t *ci)
51 49
{
52
	cmdtab = realloc((void *)cmdtab, ++ncmds * sizeof(*cmdtab));
53
	cmdtab[ncmds - 1] = *ci;
54
	qsort(cmdtab, ncmds, sizeof(*cmdtab), compare);
50
    cmdtab = realloc((void *)cmdtab, ++ncmds * sizeof(*cmdtab));
51
    cmdtab[ncmds - 1] = *ci;
52
    qsort(cmdtab, ncmds, sizeof(*cmdtab), compare);
55 53
}
56 54

  
57 55
static int
......
122 120
	return NULL;
123 121
}
124 122

  
125
void
126
add_user_command(char *optarg)
123
void add_user_command(char *optarg)
127 124
{
128
	ncmdline++;
129
	cmdline = realloc(cmdline, sizeof(char*) * (ncmdline));
130
	if (!cmdline) {
131
		perror("realloc");
132
		exit(1);
133
	}
134
	cmdline[ncmdline-1] = optarg;
125
    ncmdline++;
126
    cmdline = realloc(cmdline, ncmdline * sizeof(char *));
127
    if (!cmdline) {
128
        perror("realloc");
129
        exit(1);
130
    }
131
    cmdline[ncmdline-1] = optarg;
135 132
}
136 133

  
137 134
static int
......
160 157

  
161 158
static char *get_prompt(void);
162 159

  
163
void
164
command_loop(void)
160
void command_loop(void)
165 161
{
166
	int		c, i, j = 0, done = 0, fetchable = 0, prompted = 0;
167
	char		*input;
168
	char		**v;
169
	const cmdinfo_t	*ct;
170

  
171
	for (i = 0; !done && i < ncmdline; i++) {
172
		input = strdup(cmdline[i]);
173
		if (!input) {
174
			fprintf(stderr,
175
				_("cannot strdup command '%s': %s\n"),
176
				cmdline[i], strerror(errno));
177
			exit(1);
178
		}
179
		v = breakline(input, &c);
180
		if (c) {
181
			ct = find_command(v[0]);
182
			if (ct) {
183
				if (ct->flags & CMD_FLAG_GLOBAL)
184
					done = command(ct, c, v);
185
				else {
186
					j = 0;
187
					while (!done && (j = args_command(j)))
188
						done = command(ct, c, v);
189
				}
190
			} else
191
				fprintf(stderr, _("command \"%s\" not found\n"),
192
					v[0]);
193
		}
194
		doneline(input, v);
195
	}
196
	if (cmdline) {
197
		free(cmdline);
198
		return;
162
    int c, i, j = 0, done = 0, fetchable = 0, prompted = 0;
163
    char *input;
164
    char **v;
165
    const cmdinfo_t *ct;
166

  
167
    for (i = 0; !done && i < ncmdline; i++) {
168
        input = strdup(cmdline[i]);
169
        if (!input) {
170
            fprintf(stderr, _("cannot strdup command '%s': %s\n"),
171
                    cmdline[i], strerror(errno));
172
            exit(1);
173
        }
174
        v = breakline(input, &c);
175
        if (c) {
176
            ct = find_command(v[0]);
177
            if (ct) {
178
                if (ct->flags & CMD_FLAG_GLOBAL) {
179
                    done = command(ct, c, v);
180
                } else {
181
                    j = 0;
182
                    while (!done && (j = args_command(j))) {
183
                        done = command(ct, c, v);
184
                    }
185
                }
186
            } else {
187
                fprintf(stderr, _("command \"%s\" not found\n"), v[0]);
188
            }
199 189
	}
190
        doneline(input, v);
191
    }
192
    if (cmdline) {
193
        free(cmdline);
194
        return;
195
    }
200 196

  
201
	while (!done) {
197
    while (!done) {
202 198
        if (!prompted) {
203 199
            printf("%s", get_prompt());
204 200
            fflush(stdout);
......
212 208
        if (!fetchable) {
213 209
            continue;
214 210
        }
215
		if ((input = fetchline()) == NULL)
216
			break;
217
		v = breakline(input, &c);
218
		if (c) {
219
			ct = find_command(v[0]);
220
			if (ct)
221
				done = command(ct, c, v);
222
			else
223
				fprintf(stderr, _("command \"%s\" not found\n"),
224
					v[0]);
225
		}
226
		doneline(input, v);
211
        input = fetchline();
212
        if (input == NULL) {
213
            break;
214
        }
215
        v = breakline(input, &c);
216
        if (c) {
217
            ct = find_command(v[0]);
218
            if (ct) {
219
                done = command(ct, c, v);
220
            } else {
221
                fprintf(stderr, _("command \"%s\" not found\n"), v[0]);
222
            }
223
        }
224
        doneline(input, v);
227 225

  
228 226
        prompted = 0;
229 227
        fetchable = 0;
230
	}
228
    }
231 229
    qemu_aio_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL, NULL, NULL);
232 230
}
233 231

  
......
331 329
    return result;
332 330
}
333 331

  
334
char **
335
breakline(
336
	char	*input,
337
	int	*count)
332
char **breakline(char *input, int *count)
338 333
{
339
	int	c = 0;
340
	char	*p;
341
	char	**rval = calloc(sizeof(char *), 1);
342

  
343
	while (rval && (p = qemu_strsep(&input, " ")) != NULL) {
344
		if (!*p)
345
			continue;
346
		c++;
347
		rval = realloc(rval, sizeof(*rval) * (c + 1));
348
		if (!rval) {
349
			c = 0;
350
			break;
351
		}
352
		rval[c - 1] = p;
353
		rval[c] = NULL;
354
	}
355
	*count = c;
356
	return rval;
334
    int c = 0;
335
    char *p;
336
    char **rval = calloc(sizeof(char *), 1);
337

  
338
    while (rval && (p = qemu_strsep(&input, " ")) != NULL) {
339
        if (!*p) {
340
            continue;
341
        }
342
        c++;
343
        rval = realloc(rval, sizeof(*rval) * (c + 1));
344
        if (!rval) {
345
            c = 0;
346
            break;
347
        }
348
        rval[c - 1] = p;
349
        rval[c] = NULL;
350
    }
351
    *count = c;
352
    return rval;
357 353
}
358 354

  
359 355
void

Also available in: Unified diff