[mingw-crt/f20] Backported various Windows XP compatibility patches (RHBZ #1054481)

Erik van Pienbroek epienbro at fedoraproject.org
Tue Feb 4 23:28:14 UTC 2014


commit 0a8bf65a26b96f8f62b69cec0f3eb2773d537a3f
Author: Erik van Pienbroek <epienbro at fedoraproject.org>
Date:   Wed Feb 5 00:28:39 2014 +0100

    Backported various Windows XP compatibility patches (RHBZ #1054481)

 ...me32-and-_localtime32-to-lib64-msvcrt.def.patch |   34 ++++
 0001-Add-secapi-wrapper-for-sprintf_s.patch        |  208 ++++++++++++++++++++
 ...-rand_s-and-vsprintf_s-from-msvcrt.def.in.patch |   50 +++++
 mingw-crt.spec                                     |   16 ++-
 4 files changed, 307 insertions(+), 1 deletions(-)
---
diff --git a/0001-Add-_gmtime32-and-_localtime32-to-lib64-msvcrt.def.patch b/0001-Add-_gmtime32-and-_localtime32-to-lib64-msvcrt.def.patch
new file mode 100644
index 0000000..502e735
--- /dev/null
+++ b/0001-Add-_gmtime32-and-_localtime32-to-lib64-msvcrt.def.patch
@@ -0,0 +1,34 @@
+>From ec2ee6e10e3bcdf00c2e93eed427cc8c2b626cac Mon Sep 17 00:00:00 2001
+From: Erik van Pienbroek <epienbro at fedoraproject.org>
+Date: Sun, 19 Jan 2014 17:11:40 +0100
+Subject: [PATCH 1/2] Add _gmtime32 and _localtime32 to lib64/msvcrt.def
+
+These symbols are required by the secapi wrappers
+_gmtime32_s and _localtime32_s
+---
+ mingw-w64-crt/lib64/msvcrt.def.in | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/mingw-w64-crt/lib64/msvcrt.def.in b/mingw-w64-crt/lib64/msvcrt.def.in
+index ed81eff..a0d3647 100644
+--- a/mingw-w64-crt/lib64/msvcrt.def.in
++++ b/mingw-w64-crt/lib64/msvcrt.def.in
+@@ -356,6 +356,7 @@ _getw
+ _getwch
+ _getwche
+ _getws
++_gmtime32
+ ; _gmtime32_s replaced by emu
+ _gmtime64
+ ; _gmtime64_s replaced by emu
+@@ -471,6 +472,7 @@ _lfind
+ _loaddll
+ _lfind_s
+ _local_unwind
++_localtime32
+ ; _localtime32_s replaced by emu
+ _localtime64
+ ; _localtime64_s replaced by emu
+-- 
+1.8.4.2
+
diff --git a/0001-Add-secapi-wrapper-for-sprintf_s.patch b/0001-Add-secapi-wrapper-for-sprintf_s.patch
new file mode 100644
index 0000000..8438df1
--- /dev/null
+++ b/0001-Add-secapi-wrapper-for-sprintf_s.patch
@@ -0,0 +1,208 @@
+>From dca6ecb46f9b3f2d5652bf27208ac4ecdae1a652 Mon Sep 17 00:00:00 2001
+From: Erik van Pienbroek <epienbro at fedoraproject.org>
+Date: Sun, 26 Jan 2014 20:15:44 +0100
+Subject: [PATCH] Add secapi wrapper for sprintf_s
+
+---
+ mingw-w64-crt/Makefile.am         |  1 +
+ mingw-w64-crt/Makefile.in         | 45 +++++++++++++++++++++++++++++++++++----
+ mingw-w64-crt/lib32/msvcrt.def.in |  2 +-
+ mingw-w64-crt/lib64/msvcrt.def.in |  2 +-
+ mingw-w64-crt/secapi/sprintf_s.c  | 21 ++++++++++++++++++
+ 5 files changed, 65 insertions(+), 6 deletions(-)
+ create mode 100644 mingw-w64-crt/secapi/sprintf_s.c
+
+diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
+index ea384ac..bdca4fa 100644
+--- a/mingw-w64-crt/Makefile.am
++++ b/mingw-w64-crt/Makefile.am
+@@ -180,6 +180,7 @@ src_msvcrt=\
+   secapi/asctime_s.c \
+   secapi/memcpy_s.c \
+   secapi/rand_s.c \
++  secapi/sprintf_s.c \
+   secapi/vsprintf_s.c \
+   secapi/wmemcpy_s.c
+ 
+diff --git a/mingw-w64-crt/Makefile.in b/mingw-w64-crt/Makefile.in
+index 6669467..4c0c1cb 100644
+--- a/mingw-w64-crt/Makefile.in
++++ b/mingw-w64-crt/Makefile.in
+@@ -1081,8 +1081,8 @@
+ 	secapi/_waccess_s.c secapi/_wasctime_s.c secapi/_wctime32_s.c \
+ 	secapi/_wctime64_s.c secapi/_wstrtime_s.c secapi/_wmktemp_s.c \
+ 	secapi/_wstrdate_s.c secapi/asctime_s.c secapi/memcpy_s.c \
+-	secapi/rand_s.c secapi/vsprintf_s.c secapi/wmemcpy_s.c \
+-	misc/lc_locale_func.c lib32/msvcrt.def.in
++	secapi/rand_s.c secapi/sprintf_s.c secapi/vsprintf_s.c \
++	secapi/wmemcpy_s.c misc/lc_locale_func.c lib32/msvcrt.def.in
+ am__objects_19 =  \
+ 	misc/lib32_libmsvcrt_a-invalid_parameter_handler.$(OBJEXT) \
+ 	misc/lib32_libmsvcrt_a-output_format.$(OBJEXT) \
+@@ -1118,6 +1118,7 @@
+ 	secapi/lib32_libmsvcrt_a-asctime_s.$(OBJEXT) \
+ 	secapi/lib32_libmsvcrt_a-memcpy_s.$(OBJEXT) \
+ 	secapi/lib32_libmsvcrt_a-rand_s.$(OBJEXT) \
++	secapi/lib32_libmsvcrt_a-sprintf_s.$(OBJEXT) \
+ 	secapi/lib32_libmsvcrt_a-vsprintf_s.$(OBJEXT) \
+ 	secapi/lib32_libmsvcrt_a-wmemcpy_s.$(OBJEXT)
+ am__objects_20 = $(am__objects_19) \
+@@ -2181,8 +2182,8 @@
+ 	secapi/_waccess_s.c secapi/_wasctime_s.c secapi/_wctime32_s.c \
+ 	secapi/_wctime64_s.c secapi/_wstrtime_s.c secapi/_wmktemp_s.c \
+ 	secapi/_wstrdate_s.c secapi/asctime_s.c secapi/memcpy_s.c \
+-	secapi/rand_s.c secapi/vsprintf_s.c secapi/wmemcpy_s.c \
+-	lib64/msvcrt.def.in
++	secapi/rand_s.c secapi/sprintf_s.c secapi/vsprintf_s.c \
++	secapi/wmemcpy_s.c lib64/msvcrt.def.in
+ am__objects_50 =  \
+ 	misc/lib64_libmsvcrt_a-invalid_parameter_handler.$(OBJEXT) \
+ 	misc/lib64_libmsvcrt_a-output_format.$(OBJEXT) \
+@@ -2218,6 +2219,7 @@
+ 	secapi/lib64_libmsvcrt_a-asctime_s.$(OBJEXT) \
+ 	secapi/lib64_libmsvcrt_a-memcpy_s.$(OBJEXT) \
+ 	secapi/lib64_libmsvcrt_a-rand_s.$(OBJEXT) \
++	secapi/lib64_libmsvcrt_a-sprintf_s.$(OBJEXT) \
+ 	secapi/lib64_libmsvcrt_a-vsprintf_s.$(OBJEXT) \
+ 	secapi/lib64_libmsvcrt_a-wmemcpy_s.$(OBJEXT)
+ @LIB64_TRUE@@W32API_FALSE at am_lib64_libmsvcrt_a_OBJECTS =  \
+@@ -3820,6 +3822,7 @@
+   secapi/asctime_s.c \
+   secapi/memcpy_s.c \
+   secapi/rand_s.c \
++  secapi/sprintf_s.c \
+   secapi/vsprintf_s.c \
+   secapi/wmemcpy_s.c
+ 
+@@ -6738,6 +6741,8 @@
+ 	secapi/$(DEPDIR)/$(am__dirstamp)
+ secapi/lib32_libmsvcrt_a-rand_s.$(OBJEXT): secapi/$(am__dirstamp) \
+ 	secapi/$(DEPDIR)/$(am__dirstamp)
++secapi/lib32_libmsvcrt_a-sprintf_s.$(OBJEXT): secapi/$(am__dirstamp) \
++	secapi/$(DEPDIR)/$(am__dirstamp)
+ secapi/lib32_libmsvcrt_a-vsprintf_s.$(OBJEXT): secapi/$(am__dirstamp) \
+ 	secapi/$(DEPDIR)/$(am__dirstamp)
+ secapi/lib32_libmsvcrt_a-wmemcpy_s.$(OBJEXT): secapi/$(am__dirstamp) \
+@@ -8310,6 +8315,8 @@
+ 	secapi/$(DEPDIR)/$(am__dirstamp)
+ secapi/lib64_libmsvcrt_a-rand_s.$(OBJEXT): secapi/$(am__dirstamp) \
+ 	secapi/$(DEPDIR)/$(am__dirstamp)
++secapi/lib64_libmsvcrt_a-sprintf_s.$(OBJEXT): secapi/$(am__dirstamp) \
++	secapi/$(DEPDIR)/$(am__dirstamp)
+ secapi/lib64_libmsvcrt_a-vsprintf_s.$(OBJEXT): secapi/$(am__dirstamp) \
+ 	secapi/$(DEPDIR)/$(am__dirstamp)
+ secapi/lib64_libmsvcrt_a-wmemcpy_s.$(OBJEXT): secapi/$(am__dirstamp) \
+@@ -10662,6 +10669,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib32_libmsvcrt_a-asctime_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib32_libmsvcrt_a-memcpy_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib32_libmsvcrt_a-rand_s.Po at am__quote@
++ at AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib32_libmsvcrt_a-sprintf_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib32_libmsvcrt_a-vsprintf_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib32_libmsvcrt_a-wmemcpy_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib64_libmsvcrt_a-_access_s.Po at am__quote@
+@@ -10696,6 +10704,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib64_libmsvcrt_a-asctime_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib64_libmsvcrt_a-memcpy_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib64_libmsvcrt_a-rand_s.Po at am__quote@
++ at AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib64_libmsvcrt_a-sprintf_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib64_libmsvcrt_a-vsprintf_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at secapi/$(DEPDIR)/lib64_libmsvcrt_a-wmemcpy_s.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at stdio/$(DEPDIR)/lib32_libmingwex_a-_Exit.Po at am__quote@
+@@ -19842,6 +19851,20 @@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o secapi/lib32_libmsvcrt_a-rand_s.obj `if test -f 'secapi/rand_s.c'; then $(CYGPATH_W) 'secapi/rand_s.c'; else $(CYGPATH_W) '$(srcdir)/secapi/rand_s.c'; fi`
+ 
++secapi/lib32_libmsvcrt_a-sprintf_s.o: secapi/sprintf_s.c
++ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT secapi/lib32_libmsvcrt_a-sprintf_s.o -MD -MP -MF secapi/$(DEPDIR)/lib32_libmsvcrt_a-sprintf_s.Tpo -c -o secapi/lib32_libmsvcrt_a-sprintf_s.o `test -f 'secapi/sprintf_s.c' || echo '$(srcdir)/'`secapi/sprintf_s.c
++ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) secapi/$(DEPDIR)/lib32_libmsvcrt_a-sprintf_s.Tpo secapi/$(DEPDIR)/lib32_libmsvcrt_a-sprintf_s.Po
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='secapi/sprintf_s.c' object='secapi/lib32_libmsvcrt_a-sprintf_s.o' libtool=no @AMDEPBACKSLASH@
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o secapi/lib32_libmsvcrt_a-sprintf_s.o `test -f 'secapi/sprintf_s.c' || echo '$(srcdir)/'`secapi/sprintf_s.c
++
++secapi/lib32_libmsvcrt_a-sprintf_s.obj: secapi/sprintf_s.c
++ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT secapi/lib32_libmsvcrt_a-sprintf_s.obj -MD -MP -MF secapi/$(DEPDIR)/lib32_libmsvcrt_a-sprintf_s.Tpo -c -o secapi/lib32_libmsvcrt_a-sprintf_s.obj `if test -f 'secapi/sprintf_s.c'; then $(CYGPATH_W) 'secapi/sprintf_s.c'; else $(CYGPATH_W) '$(srcdir)/secapi/sprintf_s.c'; fi`
++ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) secapi/$(DEPDIR)/lib32_libmsvcrt_a-sprintf_s.Tpo secapi/$(DEPDIR)/lib32_libmsvcrt_a-sprintf_s.Po
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='secapi/sprintf_s.c' object='secapi/lib32_libmsvcrt_a-sprintf_s.obj' libtool=no @AMDEPBACKSLASH@
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o secapi/lib32_libmsvcrt_a-sprintf_s.obj `if test -f 'secapi/sprintf_s.c'; then $(CYGPATH_W) 'secapi/sprintf_s.c'; else $(CYGPATH_W) '$(srcdir)/secapi/sprintf_s.c'; fi`
++
+ secapi/lib32_libmsvcrt_a-vsprintf_s.o: secapi/vsprintf_s.c
+ @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT secapi/lib32_libmsvcrt_a-vsprintf_s.o -MD -MP -MF secapi/$(DEPDIR)/lib32_libmsvcrt_a-vsprintf_s.Tpo -c -o secapi/lib32_libmsvcrt_a-vsprintf_s.o `test -f 'secapi/vsprintf_s.c' || echo '$(srcdir)/'`secapi/vsprintf_s.c
+ @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) secapi/$(DEPDIR)/lib32_libmsvcrt_a-vsprintf_s.Tpo secapi/$(DEPDIR)/lib32_libmsvcrt_a-vsprintf_s.Po
+@@ -28746,6 +28769,20 @@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o secapi/lib64_libmsvcrt_a-rand_s.obj `if test -f 'secapi/rand_s.c'; then $(CYGPATH_W) 'secapi/rand_s.c'; else $(CYGPATH_W) '$(srcdir)/secapi/rand_s.c'; fi`
+ 
++secapi/lib64_libmsvcrt_a-sprintf_s.o: secapi/sprintf_s.c
++ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT secapi/lib64_libmsvcrt_a-sprintf_s.o -MD -MP -MF secapi/$(DEPDIR)/lib64_libmsvcrt_a-sprintf_s.Tpo -c -o secapi/lib64_libmsvcrt_a-sprintf_s.o `test -f 'secapi/sprintf_s.c' || echo '$(srcdir)/'`secapi/sprintf_s.c
++ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) secapi/$(DEPDIR)/lib64_libmsvcrt_a-sprintf_s.Tpo secapi/$(DEPDIR)/lib64_libmsvcrt_a-sprintf_s.Po
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='secapi/sprintf_s.c' object='secapi/lib64_libmsvcrt_a-sprintf_s.o' libtool=no @AMDEPBACKSLASH@
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o secapi/lib64_libmsvcrt_a-sprintf_s.o `test -f 'secapi/sprintf_s.c' || echo '$(srcdir)/'`secapi/sprintf_s.c
++
++secapi/lib64_libmsvcrt_a-sprintf_s.obj: secapi/sprintf_s.c
++ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT secapi/lib64_libmsvcrt_a-sprintf_s.obj -MD -MP -MF secapi/$(DEPDIR)/lib64_libmsvcrt_a-sprintf_s.Tpo -c -o secapi/lib64_libmsvcrt_a-sprintf_s.obj `if test -f 'secapi/sprintf_s.c'; then $(CYGPATH_W) 'secapi/sprintf_s.c'; else $(CYGPATH_W) '$(srcdir)/secapi/sprintf_s.c'; fi`
++ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) secapi/$(DEPDIR)/lib64_libmsvcrt_a-sprintf_s.Tpo secapi/$(DEPDIR)/lib64_libmsvcrt_a-sprintf_s.Po
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='secapi/sprintf_s.c' object='secapi/lib64_libmsvcrt_a-sprintf_s.obj' libtool=no @AMDEPBACKSLASH@
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o secapi/lib64_libmsvcrt_a-sprintf_s.obj `if test -f 'secapi/sprintf_s.c'; then $(CYGPATH_W) 'secapi/sprintf_s.c'; else $(CYGPATH_W) '$(srcdir)/secapi/sprintf_s.c'; fi`
++
+ secapi/lib64_libmsvcrt_a-vsprintf_s.o: secapi/vsprintf_s.c
+ @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT secapi/lib64_libmsvcrt_a-vsprintf_s.o -MD -MP -MF secapi/$(DEPDIR)/lib64_libmsvcrt_a-vsprintf_s.Tpo -c -o secapi/lib64_libmsvcrt_a-vsprintf_s.o `test -f 'secapi/vsprintf_s.c' || echo '$(srcdir)/'`secapi/vsprintf_s.c
+ @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) secapi/$(DEPDIR)/lib64_libmsvcrt_a-vsprintf_s.Tpo secapi/$(DEPDIR)/lib64_libmsvcrt_a-vsprintf_s.Po
+diff --git a/mingw-w64-crt/lib32/msvcrt.def.in b/mingw-w64-crt/lib32/msvcrt.def.in
+index 3455447..f32ecaf 100644
+--- a/mingw-w64-crt/lib32/msvcrt.def.in
++++ b/mingw-w64-crt/lib32/msvcrt.def.in
+@@ -1198,7 +1198,7 @@ memmove_s
+ printf_s
+ qsort_s
+ scanf_s
+-sprintf_s
++; sprintf_s replaced by emu
+ sscanf_s
+ strcat_s
+ strcpy_s
+diff --git a/mingw-w64-crt/lib64/msvcrt.def.in b/mingw-w64-crt/lib64/msvcrt.def.in
+index ceff01e..7a442ce 100644
+--- a/mingw-w64-crt/lib64/msvcrt.def.in
++++ b/mingw-w64-crt/lib64/msvcrt.def.in
+@@ -1177,7 +1177,7 @@ sin
+ sinh
+ ;sinhf
+ sprintf
+-sprintf_s
++; sprintf_s replaced by emu
+ sqrt DATA
+ sqrtf DATA
+ srand
+diff --git a/mingw-w64-crt/secapi/sprintf_s.c b/mingw-w64-crt/secapi/sprintf_s.c
+new file mode 100644
+index 0000000..8c60797
+--- /dev/null
++++ b/mingw-w64-crt/secapi/sprintf_s.c
+@@ -0,0 +1,21 @@
++#include <windows.h>
++#include <malloc.h>
++#include <errno.h>
++#include <msvcrt.h>
++
++int __cdecl sprintf_s (char *, size_t, const char *, ...);
++int __cdecl vsprintf_s (char *, size_t, const char *, va_list);
++
++int __cdecl (*__MINGW_IMP_SYMBOL(sprintf_s))(char *, size_t, const char *,...) = sprintf_s;
++
++int __cdecl
++sprintf_s (char *_DstBuf, size_t _Size, const char *_Format, ...)
++{
++  va_list argp;
++  int r;
++
++  va_start (argp, _Format);
++  r = vsprintf_s (_DstBuf, _Size, _Format, argp);
++  va_end (argp);
++  return r; 
++}
+-- 
+1.8.5.3
+
diff --git a/0002-Remove-rand_s-and-vsprintf_s-from-msvcrt.def.in.patch b/0002-Remove-rand_s-and-vsprintf_s-from-msvcrt.def.in.patch
new file mode 100644
index 0000000..5631936
--- /dev/null
+++ b/0002-Remove-rand_s-and-vsprintf_s-from-msvcrt.def.in.patch
@@ -0,0 +1,50 @@
+>From 2dac1e1583fa2d0f142a048e275845e829883777 Mon Sep 17 00:00:00 2001
+From: Erik van Pienbroek <epienbro at fedoraproject.org>
+Date: Sun, 19 Jan 2014 17:28:12 +0100
+Subject: [PATCH 2/2] Remove rand_s and vsprintf_s from msvcrt.def.in
+
+These symbols are implemented in the secapi wrappers so they
+shouldn't be part of the msvcrt.def.in files any more
+---
+ mingw-w64-crt/lib32/msvcrt.def.in | 2 +-
+ mingw-w64-crt/lib64/msvcrt.def.in | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/mingw-w64-crt/lib32/msvcrt.def.in b/mingw-w64-crt/lib32/msvcrt.def.in
+index 6c2c3cf..3455447 100644
+--- a/mingw-w64-crt/lib32/msvcrt.def.in
++++ b/mingw-w64-crt/lib32/msvcrt.def.in
+@@ -1218,7 +1218,7 @@ vsnprintf == _vsnprintf
+ snprintf == _snprintf
+ snwprintf == _snwprintf
+ vsnwprintf == _vsnwprintf
+-vsprintf_s
++; vsprintf_s replaced by emu
+ vswprintf_s
+ vwprintf_s
+ wcrtomb_s
+diff --git a/mingw-w64-crt/lib64/msvcrt.def.in b/mingw-w64-crt/lib64/msvcrt.def.in
+index a0d3647..ceff01e 100644
+--- a/mingw-w64-crt/lib64/msvcrt.def.in
++++ b/mingw-w64-crt/lib64/msvcrt.def.in
+@@ -1160,7 +1160,7 @@ qsort
+ qsort_s
+ raise
+ rand
+-rand_s
++; rand_s replaced by emu
+ realloc
+ remove
+ rename
+@@ -1239,7 +1239,7 @@ vprintf_s
+ vsnprintf == _vsnprintf
+ snprintf == _snprintf
+ vsprintf
+-vsprintf_s
++; vsprintf_s replaced by emu
+ vswprintf
+ vswprintf_s
+ vwprintf
+-- 
+1.8.4.2
+
diff --git a/mingw-crt.spec b/mingw-crt.spec
index 2e8bb15..c3b21fd 100644
--- a/mingw-crt.spec
+++ b/mingw-crt.spec
@@ -6,7 +6,7 @@
 
 Name:           mingw-crt
 Version:        3.1.0
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        MinGW Windows cross-compiler runtime
 
 License:        Public Domain and ZPLv2.1
@@ -35,6 +35,13 @@ BuildRequires:  mingw64-binutils
 BuildRequires:  mingw64-headers
 BuildRequires:  mingw64-gcc
 
+# Fix Windows XP compatibility issues mentioned at
+# https://bugzilla.redhat.com/show_bug.cgi?id=1054481
+# Patches are already upstreamed
+Patch0:         0001-Add-_gmtime32-and-_localtime32-to-lib64-msvcrt.def.patch
+Patch1:         0001-Add-secapi-wrapper-for-sprintf_s.patch
+Patch2:         0002-Remove-rand_s-and-vsprintf_s-from-msvcrt.def.in.patch
+
 
 %description
 MinGW Windows cross-compiler runtime, base libraries.
@@ -70,6 +77,10 @@ unzip %{S:0}
 %setup -q -n mingw-w64-v%{version}
 %endif
 
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+
 
 %build
 pushd mingw-w64-crt
@@ -99,6 +110,9 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_includedir}/*.c
 
 
 %changelog
+* Tue Feb  4 2014 Erik van Pienbroek <epienbro at fedoraproject.org> - 3.1.0-2
+- Backported various Windows XP compatibility patches (RHBZ #1054481)
+
 * Thu Jan  9 2014 Erik van Pienbroek <epienbro at fedoraproject.org> - 3.1.0-1
 - Update to 3.1.0
 


More information about the scm-commits mailing list