diff --git a/emacs-21.3-format1.dif b/emacs-21.3-format1.dif new file mode 100644 index 0000000..ee681c5 --- /dev/null +++ b/emacs-21.3-format1.dif @@ -0,0 +1,72 @@ +--- 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 + #include + #include + +@@ -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); + } diff --git a/emacs.changes b/emacs.changes index 6e99b7e..828dae3 100644 --- a/emacs.changes +++ b/emacs.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue May 15 15:54:22 CEST 2007 - werner@suse.de + +- Use stdarg(3) instead of guessing argument pointers (bug #273211) + ------------------------------------------------------------------- Thu Mar 29 19:59:08 CEST 2007 - aj@suse.de diff --git a/emacs.spec b/emacs.spec index d1c8a2d..22fb7cd 100644 --- a/emacs.spec +++ b/emacs.spec @@ -20,7 +20,7 @@ Requires: emacs-info ctags emacs_program Provides: ge_site ge_exec Autoreqprov: on Version: 21.3 -Release: 268 +Release: 279 BuildRoot: %{_tmppath}/%{name}-%{version}-build Summary: GNU Emacs Base Package Source: emacs-21.3.tar.bz2 @@ -48,6 +48,7 @@ Patch17: emacs-21.3-level3.patch Patch18: emacs-21.3-movemail.patch Patch19: emacs-21.3-sentinel.patch Patch20: emacs-21.3-xim.patch +Patch21: emacs-21.3-format1.dif %{expand: %%global _exec_prefix %(type -p pkg-config &>/dev/null && pkg-config --variable prefix x11 || echo /usr/X11R6)} %if "%_exec_prefix" == "/usr/X11R6" %define _x11lib %{_exec_prefix}/%{_lib} @@ -219,6 +220,7 @@ Authors: %patch18 -p1 -b .movemail %patch19 -p0 -b .gcc4 %patch20 -p0 -b .xim +%patch21 -p0 -b .fmt1 %patch %patch12 -p0 -b .ppc @@ -2398,6 +2400,8 @@ done /usr/share/emacs/%{version}/lisp/xt-mouse.el %changelog +* Tue May 15 2007 - werner@suse.de +- Use stdarg(3) instead of guessing argument pointers (bug #273211) * Thu Mar 29 2007 - aj@suse.de - Add ncurses-devel to BuildRequires. * Fri Jan 12 2007 - werner@suse.de