aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohnvg2012-03-15 11:38:11 +0000
committerjohnvg2012-03-15 11:38:11 +0000
commit8691e7f3c654d74abe423997c5572fa85b031f84 (patch)
tree69116588188bcacad926940dbfe016e8ba57dca5
parentincrease 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
-rw-r--r--main/Unix/ipc.c50
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);
}