/* we're inside a word or quote, and reached its end*/
if (word_start)
{
- int len;
- char *word_end=p;
- /* This will handle extra whitespace within quotes */
- while (isspace(*word_start)&&(word_start<word_end))
- word_start++;
- while (isspace(*(word_end-1))&&(word_start<word_end))
- word_end--;
-
- len = word_end - word_start;
-
- if (len>0)
- {
- /* copy the word */
- memcpy(words[nwords] = malloc(len + 1), word_start, len);
- /* add terminating NUL */
- words[nwords++][len] = 0;
- }
+ int len;
+ char *word_end=p;
+
+ /* This will handle extra whitespace within quotes */
+ while (isspace(*word_start)&&(word_start<word_end))
+ word_start++;
+ while (isspace(*(word_end-1))&&(word_start<word_end))
+ word_end--;
+ len = word_end - word_start;
+
+ if (len>0)
+ {
+ /* copy the word */
+ memcpy(words[nwords] = malloc(len + 1), word_start, len);
+ /* add terminating NUL */
+ words[nwords++][len] = 0;
+ }
}
-
/* we're done parsing the line */
if (!*p)
break;
/* skip over trailing quote or whitespace*/
if (inquote || isspace(*p))
p++;
- while (isspace(*p))
- p++;
-
+ while (isspace(*p))
+ p++;
+
inquote = 0;
word_start = 0;
}
{
/* increase buffer until it fits the whole string */
if (!(p = realloc(buffer, size += 4096)))
+ {
+ /* gotta free up */
+ if (buffer)
+ free(buffer);
return;
+ }
buffer = p;
}
/* vsnprintf failed */
if (n < 0)
+ {
+ if (buffer)
+ free(buffer);
return;
+ }
p = buffer;
{
int retval = ERROR_OK;
int old_command_mode;
- char buffer[4096];
+ char *buffer=malloc(4096);
+ if (buffer==NULL)
+ {
+ return ERROR_INVALID_ARGUMENTS;
+ }
old_command_mode = context->mode;
context->mode = mode;
}
context->mode = old_command_mode;
+
+
+ free(buffer);
return retval;
}
int command_done(command_context_t *context)
{
free(context);
+ context = NULL;
return ERROR_OK;
}