[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] sxpr_parser.c, sxpr_parser.h:



ChangeSet 1.1853.1.1, 2005/05/13 15:36:51+01:00, cl349@xxxxxxxxxxxxxxxxxxxx

        sxpr_parser.c, sxpr_parser.h:
          Revert size of sxpr parser input buffer to original size and make
          buffer allocated dynamically and increasing in size on demand.
        Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>



 sxpr_parser.c |   25 ++++++++++++++++++++++---
 sxpr_parser.h |    4 ++--
 2 files changed, 24 insertions(+), 5 deletions(-)


diff -Nru a/tools/libxutil/sxpr_parser.c b/tools/libxutil/sxpr_parser.c
--- a/tools/libxutil/sxpr_parser.c      2005-05-13 14:02:56 -04:00
+++ b/tools/libxutil/sxpr_parser.c      2005-05-13 14:02:56 -04:00
@@ -160,6 +160,8 @@
     if(!z) return;
     objfree(z->val);
     z->val = ONONE;
+    if (z->buf)
+        deallocate(z->buf);
     deallocate(z);
 }
 
@@ -171,6 +173,7 @@
   
     if(!z) goto exit;
     err = 0;
+    z->buf = NULL;
     reset(z);
   exit:
     if(err){
@@ -201,8 +204,16 @@
 static int savechar(Parser *p, char c){
     int err = 0;
     if(p->buf_i >= p->buf_n){
-        err = -ENOMEM;
-        goto exit;
+        char *nbuf;
+        nbuf = allocate(2 * (p->buf_n + 1));
+        if (nbuf == NULL) {
+            err = -ENOMEM;
+            goto exit;
+        }
+        memcpy(nbuf, p->buf, p->buf_i);
+        deallocate(p->buf);
+       p->buf = nbuf;
+       p->buf_n = 2 * (p->buf_n + 1) - 1;
     }
     p->buf[p->buf_i] = c;
     p->buf_i++;
@@ -687,8 +698,16 @@
 static void reset(Parser *z){
   IOStream *error_out = z->error_out;
   int flags = z->flags;
+  int buf_n = z->buf_n;
+  char *buf = z->buf;
   memzero(z, sizeof(Parser));
-  z->buf_n = sizeof(z->buf) - 1;
+  if (buf) {
+      z->buf = buf;
+      z->buf_n = buf_n;
+  } else {
+      z->buf = (char *)allocate(PARSER_BUF_SIZE);
+      z->buf_n = PARSER_BUF_SIZE - 1;
+  }
   z->buf_i = 0;
   z->line_no = 1;
   z->char_no = 0;
diff -Nru a/tools/libxutil/sxpr_parser.h b/tools/libxutil/sxpr_parser.h
--- a/tools/libxutil/sxpr_parser.h      2005-05-13 14:02:56 -04:00
+++ b/tools/libxutil/sxpr_parser.h      2005-05-13 14:02:56 -04:00
@@ -28,7 +28,7 @@
 /** Size of a parser input buffer.
  * Tokens read must fit into this size (including trailing null).
  */
-#define PARSER_BUF_SIZE 4096
+#define PARSER_BUF_SIZE 1024
 
 struct Parser;
 typedef int ParserStateFn(struct Parser *, char c);
@@ -60,7 +60,7 @@
     /** Lookahead character. */
     char c;
     /** Buffer for reading tokens. */
-    char buf[PARSER_BUF_SIZE];
+    char *buf;
     /** Size of token buffer. */
     int buf_n;
     int buf_i;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.