73 lines
1.7 KiB
Plaintext
73 lines
1.7 KiB
Plaintext
--- src/lisp.h
|
|
+++ src/lisp.h 2007-05-15 13:43:33.195341769 +0000
|
|
@@ -2402,7 +2402,11 @@ EXFUN (Fbolp, 0);
|
|
EXFUN (Fbobp, 0);
|
|
EXFUN (Fformat, MANY);
|
|
EXFUN (Fmessage, MANY);
|
|
+#ifdef NO_ARG_ARRAY
|
|
extern Lisp_Object format1 P_ ((/* char *, ... */));
|
|
+#else
|
|
+extern Lisp_Object format1 P_ ((char *, ...));
|
|
+#endif
|
|
extern Lisp_Object make_buffer_string P_ ((int, int, int));
|
|
EXFUN (Fbuffer_substring, 2);
|
|
EXFUN (Fbuffer_string, 0);
|
|
--- src/editfns.c
|
|
+++ src/editfns.c 2007-05-15 13:41:46.023982028 +0000
|
|
@@ -20,6 +20,7 @@ the Free Software Foundation, Inc., 59 T
|
|
Boston, MA 02111-1307, USA. */
|
|
|
|
|
|
+#include <stdarg.h>
|
|
#include <config.h>
|
|
#include <sys/types.h>
|
|
|
|
@@ -3517,11 +3518,11 @@ Use %% to put a single % into the output
|
|
Lisp_Object
|
|
#ifdef NO_ARG_ARRAY
|
|
format1 (string1, arg0, arg1, arg2, arg3, arg4)
|
|
+ char *string1;
|
|
EMACS_INT arg0, arg1, arg2, arg3, arg4;
|
|
#else
|
|
-format1 (string1)
|
|
+format1 (char *string1, ...)
|
|
#endif
|
|
- char *string1;
|
|
{
|
|
char buf[100];
|
|
#ifdef NO_ARG_ARRAY
|
|
@@ -3533,7 +3534,32 @@ format1 (string1)
|
|
args[4] = arg4;
|
|
doprnt (buf, sizeof buf, string1, (char *)0, 5, (char **) args);
|
|
#else
|
|
- doprnt (buf, sizeof buf, string1, (char *)0, 5, &string1 + 1);
|
|
+ const char *fmt = string1;
|
|
+ int nargs = 0;
|
|
+ long args[5];
|
|
+ va_list ap;
|
|
+
|
|
+ va_start(ap, string1);
|
|
+ while (*fmt && nargs < 5) {
|
|
+ if (*fmt++ == '%') {
|
|
+ void *va = NULL;
|
|
+ switch (*fmt) {
|
|
+ case 's':
|
|
+ va = (void*)va_arg(ap, char*);
|
|
+ break;
|
|
+ case 'd':
|
|
+ case 'c':
|
|
+ va = (void*)va_arg(ap, int);
|
|
+ break;
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ if (va)
|
|
+ args[nargs++] = (long)va;
|
|
+ }
|
|
+ }
|
|
+ va_end(ap);
|
|
+ doprnt (buf, sizeof buf, string1, string1 + strlen(string1), nargs, (char **)args);
|
|
#endif
|
|
return build_string (buf);
|
|
}
|