summaryrefslogtreecommitdiff
path: root/lang/sr/files/patch-rts__misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'lang/sr/files/patch-rts__misc.c')
-rw-r--r--lang/sr/files/patch-rts__misc.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/lang/sr/files/patch-rts__misc.c b/lang/sr/files/patch-rts__misc.c
new file mode 100644
index 000000000000..3a1c363fdbbb
--- /dev/null
+++ b/lang/sr/files/patch-rts__misc.c
@@ -0,0 +1,50 @@
+--- rts/misc.c.orig Sat Dec 13 19:38:54 2003
++++ rts/misc.c Sat Dec 13 19:59:34 2003
+@@ -1,6 +1,6 @@
+ /* misc.c -- miscellaneous routines supporting the generated code */
+
+-#include <varargs.h>
++#include <stdarg.h>
+ #include "rts.h"
+
+
+@@ -15,8 +15,7 @@
+ */
+ /*VARARGS*/
+ Ptr
+-sr_cat (va_alist)
+-va_dcl
++sr_cat (String *a, ...)
+ {
+ va_list ap;
+ String *s, *t;
+@@ -24,7 +23,12 @@
+ char *p;
+
+ n = 0; /* total the string lengths */
+- va_start (ap);
++ va_start (ap, a);
++ if ((int) a & 1)
++ n++;
++ else
++ n += s->length;
++
+ while ((s = va_arg (ap, String *)) != NULL)
+ if ((int) s & 1)
+ n++; /* char argument */
+@@ -37,7 +41,14 @@
+ t->length = n;
+
+ p = DATA (t);
+- va_start (ap);
++ va_start (ap, a);
++ if ((int) a & 1) {
++ *p++ = (int) a >> 2;
++ } else {
++ memcpy (p, DATA (a), a->length);
++ p += a->length;
++ }
++
+ while ((s = va_arg (ap, String *)) != NULL) { /* for each input string: */
+ if ((int) s & 1) {
+ *p++ = (int) s >> 2; /* copy in char argument */