diff options
author | johnvg | 2012-03-15 11:38:11 +0000 |
---|---|---|
committer | johnvg | 2012-03-15 11:38:11 +0000 |
commit | 8691e7f3c654d74abe423997c5572fa85b031f84 (patch) | |
tree | 69116588188bcacad926940dbfe016e8ba57dca5 /main/Unix/ipc.c | |
parent | increase heap size to 48 MB (diff) |
remove the 1024 character limit of the command buffer
(reallocate if necessary)
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@2046 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'main/Unix/ipc.c')
-rw-r--r-- | main/Unix/ipc.c | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/main/Unix/ipc.c b/main/Unix/ipc.c index bf2cd9e..be521b6 100644 --- a/main/Unix/ipc.c +++ b/main/Unix/ipc.c @@ -52,8 +52,8 @@ ConvertCleanString (CleanString string) } /* ConvertCleanString */ static FILE *commands, *results; -# define COMMAND_BUFFER_SIZE 1024 -static char command_buffer[COMMAND_BUFFER_SIZE]; +static char *command_buffer_p=NULL; +static int command_buffer_size=0; static void crash (void) @@ -98,19 +98,51 @@ int open_pipes (CleanString commands_clean, CleanString results_clean) int get_command_length (void) { log ("reading command\n"); - if (fgets (command_buffer, COMMAND_BUFFER_SIZE, commands) == NULL) - return -1; - else + + if (command_buffer_p==NULL){ + command_buffer_p = malloc (1024); + if (command_buffer_p==NULL) + return -1; + command_buffer_size=1024; + } + { - log ("command = %s", command_buffer); - return (strlen (command_buffer)); + int n_chars,max_n_chars,c; + + n_chars=0; + max_n_chars=command_buffer_size-1; + + do { + c=fgetc (commands); + if (c==EOF) + break; + command_buffer_p[n_chars++]=c; + if (n_chars==max_n_chars){ + char *new_command_buffer_p; + + new_command_buffer_p = realloc (command_buffer_p,command_buffer_size<<1); + if (new_command_buffer_p==NULL){ + command_buffer_p[n_chars-1]='\0'; + return -1; + } + command_buffer_p=new_command_buffer_p; + command_buffer_size=command_buffer_size<<1; + max_n_chars=command_buffer_size-1; + } + } while (c!='\n'); + + command_buffer_p[n_chars]='\0'; + + log ("command = %s", command_buffer_p); + + return n_chars; } } int get_command (CleanString cleanString) { - log ("%s\n", command_buffer); - strncpy (cleanString->chars, command_buffer, cleanString->length); + log ("%s\n", command_buffer_p); + strncpy (cleanString->chars, command_buffer_p, cleanString->length); return (0); } |