summaryrefslogtreecommitdiff
path: root/dlib/dlib.c
diff options
context:
space:
mode:
Diffstat (limited to 'dlib/dlib.c')
-rw-r--r--dlib/dlib.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/dlib/dlib.c b/dlib/dlib.c
index d60f1bc6..23534730 100644
--- a/dlib/dlib.c
+++ b/dlib/dlib.c
@@ -406,6 +406,17 @@ void dStr_vsprintfa (Dstr *ds, const char *format, va_list argp)
va_copy(argp2, argp);
n = vsnprintf(ds->str + ds->len, ds->sz - ds->len, format, argp2);
va_end(argp2);
+#if defined(__sgi)
+ /* IRIX does not conform to C99; if the entire argument did not fit
+ * into the buffer, n = buffer space used (minus 1 for terminator)
+ */
+ if (n > -1 && n + 1 < ds->sz - ds->len) {
+ ds->len += n; /* Success! */
+ break;
+ } else {
+ n_sz = ds->sz * 2;
+ }
+#else
if (n > -1 && n < ds->sz - ds->len) {
ds->len += n; /* Success! */
break;
@@ -414,6 +425,7 @@ void dStr_vsprintfa (Dstr *ds, const char *format, va_list argp)
} else { /* old glibc */
n_sz = ds->sz * 2;
}
+#endif
dStr_resize(ds, n_sz, (ds->len > 0) ? 1 : 0);
}
}