Fixed issues which arose on x86_64 architecture
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 12 Sep 2005 11:33:55 +0000 (11:33 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 12 Sep 2005 11:33:55 +0000 (11:33 +0000)
src/ChangeLog
src/dictionary.c
src/dictionary.h
src/str.c

index dc2c605edd292403bad594e0b93e56d7b374a82f..199f8ec52c4d48f8f76c79bc939453ebf5cec4dc 100644 (file)
@@ -1,3 +1,10 @@
+Mon Sep 12 19:26:06 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+       * dictionary.[ch]  Changed cnt from size_t* to int* since that's
+       what it's called as, and on  x86_64 machines they're different sizes.
+       
+       * str.c: (ds_vprintf) Copied va_list args so they can be re-used
+       
 Sun Aug 21 00:12:24 2005  Ben Pfaff  <blp@gnu.org>
 
        * lexer.c: (lex_sbc_only_once) New function.
index c63b2e1bcf43a0ab48866da22c4ecb9e513b2224..758f199763facd24f20513520bc934508c86d457 100644 (file)
@@ -223,7 +223,7 @@ dict_get_var (const struct dictionary *d, size_t idx)
    exclude ordinary, system, and/or scratch variables. */
 void
 dict_get_vars (const struct dictionary *d, struct variable ***vars,
-               size_t *cnt, unsigned exclude_classes)
+               int *cnt, unsigned exclude_classes)
 {
   size_t count;
   size_t i;
index e923d52dc252d3a25debe74007e083a463c36f75..e527dd518fea9a528515aec339a93285f70444f6 100644 (file)
@@ -34,7 +34,7 @@ void dict_destroy (struct dictionary *);
 size_t dict_get_var_cnt (const struct dictionary *);
 struct variable *dict_get_var (const struct dictionary *, size_t idx);
 void dict_get_vars (const struct dictionary *,
-                    struct variable ***vars, size_t *cnt,
+                    struct variable ***vars, int *cnt,
                     unsigned exclude_classes);
 
 struct variable *dict_create_var (struct dictionary *, const char *,
index d497078a585f1a994cf11be3a19e3ee0f894adbf..fe9ad814680590df36575e9e18fc482c48631cf3 100644 (file)
--- a/src/str.c
+++ b/src/str.c
@@ -453,7 +453,9 @@ ds_vprintf (struct string *st, const char *format, va_list args)
      been written. */
 
   int avail, needed;
+  va_list a1;
 
+  va_copy(a1, args);
   avail = st->capacity - st->length + 1;
   needed = vsnprintf (st->string + st->length, avail, format, args);
 
@@ -462,17 +464,22 @@ ds_vprintf (struct string *st, const char *format, va_list args)
     {
       ds_extend (st, st->length + needed);
       
-      vsprintf (st->string + st->length, format, args);
+      vsprintf (st->string + st->length, format, a1);
     }
   else
     while (needed == -1)
       {
+       va_list a2;
+       va_copy(a2, a1);
+
        ds_extend (st, (st->capacity + 1) * 2);
        avail = st->capacity - st->length + 1;
 
-       needed = vsnprintf (st->string + st->length, avail, format, args);
+       needed = vsnprintf (st->string + st->length, avail, format, a2);
+       va_end(a2);
 
       }
+  va_end(a1);
 
   st->length += needed;
 }