Re: [Mingw-w64-public] [PATCH 1/2] Remove vsnprintf forward from libmingwex.

2017-11-24 Thread Jacek Caban
On 24.11.2017 20:45, Martin Storsjö wrote:
> On Fri, 24 Nov 2017, Jacek Caban wrote:
>
>>
>> It's properly forwarded by crt import libs.
>>
>> Signed-off-by: Jacek Caban 
>> ---
>> mingw-w64-crt/Makefile.am   |  2 +-
>> mingw-w64-crt/stdio/vsnprintf.c | 13 -
>> 2 files changed, 1 insertion(+), 14 deletions(-)
>> delete mode 100644 mingw-w64-crt/stdio/vsnprintf.c
>
> I'm not quite sure I follow - when the headers direct snprintf and
> vsnprintf into calls to __ms_vsnprintf, how are they resolved without
> this? No def files or anything in the libmsvcr*.a provide
> __ms_vsnprintf in any form that I can see? 

Oh, I messed things here. I think we should be able to get rid of this
__ms prefix, but this patch is definitely wrong. Please ignore that for now.

Thanks,
Jacek

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCH 2/2] Use public _acmdln and _wcmdln declarations in crt and get rid of no loner needed ucrtbase compat hack.

2017-11-24 Thread Martin Storsjö

On Fri, 24 Nov 2017, Jacek Caban wrote:


Signed-off-by: Jacek Caban 
---
mingw-w64-crt/crt/ucrtbase_compat.c |  8 
mingw-w64-crt/include/internal.h| 12 
2 files changed, 20 deletions(-)


Nice, thanks!

Signed-off-by: Martin Storsjö 

(Fee free to add the S-o-b to all the other ones as well, I forgot to add 
it to the replies.)


// Martin
--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCH 1/2] corecrt_startup.h: Added a new file with _acmdln and _wcmdln declarations.

2017-11-24 Thread Martin Storsjö

On Fri, 24 Nov 2017, Jacek Caban wrote:


Signed-off-by: Jacek Caban 
---
mingw-w64-headers/crt/corecrt_startup.h | 23 +++
mingw-w64-headers/crt/process.h |  1 +
2 files changed, 24 insertions(+)
create mode 100644 mingw-w64-headers/crt/corecrt_startup.h


Seems ok to me

// Martin

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCH 2/2] Use .def files to forward vsnprintf_s to _vsnprintf_s.

2017-11-24 Thread Martin Storsjö

On Fri, 24 Nov 2017, Jacek Caban wrote:


Signed-off-by: Jacek Caban 
---
mingw-w64-crt/Makefile.am  |  2 +-
mingw-w64-crt/def-include/msvcrt-common.def.in |  2 ++
mingw-w64-crt/stdio/vsnprintf_s.c  | 16 
3 files changed, 3 insertions(+), 17 deletions(-)
delete mode 100644 mingw-w64-crt/stdio/vsnprintf_s.c



diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 322d2b68..b3ebafb0 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -327,7 +327,7 @@ src_libmingwex=\
   stdio/mingw_vsnprintf.c  stdio/mingw_vsnprintfw.c  stdio/mingw_vsprintf.c   
stdio/mingw_vsprintfw.c   stdio/mingw_wscanf.c\
   stdio/mingw_wvfscanf.c   stdio/snprintf.c  stdio/snwprintf.c
stdio/strtof.cstdio/truncate.c\
   stdio/ulltoa.c   stdio/ulltow.cstdio/vasprintf.c
stdio/vfscanf.c   stdio/vfwscanf.c\
-  stdio/vscanf.c   stdio/vsnprintf_s.c  stdio/vsnwprintf.c
stdio/vsscanf.c \
+  stdio/vscanf.c   stdio/vsnwprintf.cstdio/vsscanf.c \
   stdio/vswscanf.c stdio/vwscanf.c   stdio/wtoll.c
stdio/mingw_asprintf.cstdio/mingw_vasprintf.c

 # these go into both 32 and 64 bit x86 versions:
diff --git a/mingw-w64-crt/def-include/msvcrt-common.def.in 
b/mingw-w64-crt/def-include/msvcrt-common.def.in
index 92f047fb..6c10b43b 100644
--- a/mingw-w64-crt/def-include/msvcrt-common.def.in
+++ b/mingw-w64-crt/def-include/msvcrt-common.def.in
@@ -125,6 +125,8 @@ ADD_UNDERSCORE(hypot)
 ;logb
 ADD_UNDERSCORE(nextafter)

+ADD_UNDERSCORE(vsnprintf_s)
+
 #ifndef UCRTBASE
 _daylight DATA
 _timezone DATA


Since ucrtbase doesn't have these functions, I guess it'd make more sense 
to move this into the #ifndef block below?


Looks ok to me otherwise though - feel free to go ahead.

// Martin

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCH 1/2] Remove vsnprintf forward from libmingwex.

2017-11-24 Thread Martin Storsjö

On Fri, 24 Nov 2017, Jacek Caban wrote:



It's properly forwarded by crt import libs.

Signed-off-by: Jacek Caban 
---
mingw-w64-crt/Makefile.am   |  2 +-
mingw-w64-crt/stdio/vsnprintf.c | 13 -
2 files changed, 1 insertion(+), 14 deletions(-)
delete mode 100644 mingw-w64-crt/stdio/vsnprintf.c


I'm not quite sure I follow - when the headers direct snprintf and 
vsnprintf into calls to __ms_vsnprintf, how are they resolved without 
this? No def files or anything in the libmsvcr*.a provide __ms_vsnprintf 
in any form that I can see?


// Martin

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] [PATCH 2/2] Use public _acmdln and _wcmdln declarations in crt and get rid of no loner needed ucrtbase compat hack.

2017-11-24 Thread Jacek Caban
Signed-off-by: Jacek Caban 
---
 mingw-w64-crt/crt/ucrtbase_compat.c |  8 
 mingw-w64-crt/include/internal.h| 12 
 2 files changed, 20 deletions(-)


diff --git a/mingw-w64-crt/crt/ucrtbase_compat.c b/mingw-w64-crt/crt/ucrtbase_compat.c
index cb4e8270..e6956c8c 100644
--- a/mingw-w64-crt/crt/ucrtbase_compat.c
+++ b/mingw-w64-crt/crt/ucrtbase_compat.c
@@ -56,8 +56,6 @@ _CRTIMP char*** __cdecl __p___argv(void);
 _CRTIMP wchar_t*** __cdecl __p___wargv(void);
 _CRTIMP char*** __cdecl __p__environ(void);
 _CRTIMP wchar_t*** __cdecl __p__wenviron(void);
-_CRTIMP char** __cdecl __p__acmdln(void);
-_CRTIMP wchar_t** __cdecl __p__wcmdln(void);
 
 _CRTIMP int __cdecl _crt_atexit(_onexit_t func);
 
@@ -77,7 +75,6 @@ int __cdecl __getmainargs(int * _Argc, char *** _Argv, char ***_Env, int _DoWild
   *_Argv = *__p___argv();
   *_Env = *__p__environ();
   __set_app_type(_StartInfo->newmode);
-  __MINGW_IMP_SYMBOL(_acmdln) = __p__acmdln();
   return 0;
 }
 
@@ -89,7 +86,6 @@ int __cdecl __wgetmainargs(int * _Argc, wchar_t *** _Argv, wchar_t ***_Env, int
   *_Argv = *__p___wargv();
   *_Env = *__p__wenviron();
   __set_app_type(_StartInfo->newmode);
-  __MINGW_IMP_SYMBOL(_wcmdln) = (char**) __p__wcmdln();
   return 0;
 }
 
@@ -129,10 +125,6 @@ char *** __MINGW_IMP_SYMBOL(__initenv) = __initenv;
 wchar_t *** __MINGW_IMP_SYMBOL(__winitenv) = __winitenv;
 int * __MINGW_IMP_SYMBOL(_fmode) = _fmode;
 
-char ** __MINGW_IMP_SYMBOL(_acmdln);
-char ** __MINGW_IMP_SYMBOL(_wcmdln);
-
-
 
 // The parts below are mostly ugly workarounds, necessary to appease code
 // within libmingwex and CRT startup routines built for legacy msvcrt.dll
diff --git a/mingw-w64-crt/include/internal.h b/mingw-w64-crt/include/internal.h
index e2f2d596..6d2b5ad2 100644
--- a/mingw-w64-crt/include/internal.h
+++ b/mingw-w64-crt/include/internal.h
@@ -119,18 +119,6 @@ extern char *** __MINGW_IMP_SYMBOL(__initenv);
 #define __initenv (* __MINGW_IMP_SYMBOL(__initenv))
 #endif
 
-#ifndef _acmdln
-extern char ** __MINGW_IMP_SYMBOL(_acmdln);
-#define _acmdln (* __MINGW_IMP_SYMBOL(_acmdln))
-/*  _CRTIMP extern char *_acmdln; */
-#endif
-
-#ifndef _wcmdln
-extern char ** __MINGW_IMP_SYMBOL(_wcmdln);
-#define _wcmdln (* __MINGW_IMP_SYMBOL(_wcmdln))
-/*  __CRTIMP extern wchar_t *_wcmdln; */
-#endif
-
   _CRTIMP void __cdecl _amsg_exit(int);
 
   int __CRTDECL _setargv(void);

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] [PATCH 1/2] corecrt_startup.h: Added a new file with _acmdln and _wcmdln declarations.

2017-11-24 Thread Jacek Caban
Signed-off-by: Jacek Caban 
---
 mingw-w64-headers/crt/corecrt_startup.h | 23 +++
 mingw-w64-headers/crt/process.h |  1 +
 2 files changed, 24 insertions(+)
 create mode 100644 mingw-w64-headers/crt/corecrt_startup.h


diff --git a/mingw-w64-headers/crt/corecrt_startup.h b/mingw-w64-headers/crt/corecrt_startup.h
new file mode 100644
index ..9afdafcc
--- /dev/null
+++ b/mingw-w64-headers/crt/corecrt_startup.h
@@ -0,0 +1,23 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC_CORECRT_STARTUP
+#define _INC_CORECRT_STARTUP
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP char **__cdecl __p__acmdln(void);
+#define _acmdln (*__p__acmdln())
+
+_CRTIMP wchar_t **__cdecl __p__wcmdln(void);
+#define _wcmdln (*__p__wcmdln())
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/mingw-w64-headers/crt/process.h b/mingw-w64-headers/crt/process.h
index 60a5233c..b6986852 100644
--- a/mingw-w64-headers/crt/process.h
+++ b/mingw-w64-headers/crt/process.h
@@ -7,6 +7,7 @@
 #define _INC_PROCESS
 
 #include 
+#include 
 
 /* Includes a definition of _pid_t and pid_t */
 #include 

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] [PATCH 2/2] Use .def files to forward vsnprintf_s to _vsnprintf_s.

2017-11-24 Thread Jacek Caban
Signed-off-by: Jacek Caban 
---
 mingw-w64-crt/Makefile.am  |  2 +-
 mingw-w64-crt/def-include/msvcrt-common.def.in |  2 ++
 mingw-w64-crt/stdio/vsnprintf_s.c  | 16 
 3 files changed, 3 insertions(+), 17 deletions(-)
 delete mode 100644 mingw-w64-crt/stdio/vsnprintf_s.c


diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 322d2b68..b3ebafb0 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -327,7 +327,7 @@ src_libmingwex=\
   stdio/mingw_vsnprintf.c  stdio/mingw_vsnprintfw.c  stdio/mingw_vsprintf.c   stdio/mingw_vsprintfw.c   stdio/mingw_wscanf.c\
   stdio/mingw_wvfscanf.c   stdio/snprintf.c  stdio/snwprintf.cstdio/strtof.cstdio/truncate.c\
   stdio/ulltoa.c   stdio/ulltow.cstdio/vasprintf.cstdio/vfscanf.c   stdio/vfwscanf.c\
-  stdio/vscanf.c   stdio/vsnprintf_s.c  stdio/vsnwprintf.cstdio/vsscanf.c \
+  stdio/vscanf.c   stdio/vsnwprintf.cstdio/vsscanf.c \
   stdio/vswscanf.c stdio/vwscanf.c   stdio/wtoll.cstdio/mingw_asprintf.cstdio/mingw_vasprintf.c
 
 # these go into both 32 and 64 bit x86 versions:
diff --git a/mingw-w64-crt/def-include/msvcrt-common.def.in b/mingw-w64-crt/def-include/msvcrt-common.def.in
index 92f047fb..6c10b43b 100644
--- a/mingw-w64-crt/def-include/msvcrt-common.def.in
+++ b/mingw-w64-crt/def-include/msvcrt-common.def.in
@@ -125,6 +125,8 @@ ADD_UNDERSCORE(hypot)
 ;logb
 ADD_UNDERSCORE(nextafter)
 
+ADD_UNDERSCORE(vsnprintf_s)
+
 #ifndef UCRTBASE
 _daylight DATA
 _timezone DATA
diff --git a/mingw-w64-crt/stdio/vsnprintf_s.c b/mingw-w64-crt/stdio/vsnprintf_s.c
deleted file mode 100644
index 1618dbec..
--- a/mingw-w64-crt/stdio/vsnprintf_s.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#define __CRT__NO_INLINE
-#include 
-#include 
-
-int __cdecl vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
-_CRTIMP int __cdecl _vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
-
-int __cdecl vsnprintf_s (char *s, size_t _DstSize, size_t _MaxCount, const char *format, va_list arg)
-{
-return _vsnprintf_s(s, _DstSize, _MaxCount, format, arg);
-}

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] [PATCH 1/2] Remove vsnprintf forward from libmingwex.

2017-11-24 Thread Jacek Caban

It's properly forwarded by crt import libs.

Signed-off-by: Jacek Caban 
---
 mingw-w64-crt/Makefile.am   |  2 +-
 mingw-w64-crt/stdio/vsnprintf.c | 13 -
 2 files changed, 1 insertion(+), 14 deletions(-)
 delete mode 100644 mingw-w64-crt/stdio/vsnprintf.c


diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 22d086ac..322d2b68 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -327,7 +327,7 @@ src_libmingwex=\
   stdio/mingw_vsnprintf.c  stdio/mingw_vsnprintfw.c  stdio/mingw_vsprintf.c   stdio/mingw_vsprintfw.c   stdio/mingw_wscanf.c\
   stdio/mingw_wvfscanf.c   stdio/snprintf.c  stdio/snwprintf.cstdio/strtof.cstdio/truncate.c\
   stdio/ulltoa.c   stdio/ulltow.cstdio/vasprintf.cstdio/vfscanf.c   stdio/vfwscanf.c\
-  stdio/vscanf.c   stdio/vsnprintf.c stdio/vsnprintf_s.c  stdio/vsnwprintf.cstdio/vsscanf.c \
+  stdio/vscanf.c   stdio/vsnprintf_s.c  stdio/vsnwprintf.cstdio/vsscanf.c \
   stdio/vswscanf.c stdio/vwscanf.c   stdio/wtoll.cstdio/mingw_asprintf.cstdio/mingw_vasprintf.c
 
 # these go into both 32 and 64 bit x86 versions:
diff --git a/mingw-w64-crt/stdio/vsnprintf.c b/mingw-w64-crt/stdio/vsnprintf.c
deleted file mode 100644
index 1346c5c8..
--- a/mingw-w64-crt/stdio/vsnprintf.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#define __CRT__NO_INLINE
-#include 
-#include 
-
-int __cdecl __ms_vsnprintf (char *s,size_t n,const char *format,va_list arg)
-{
-return _vsnprintf(s, n, format, arg);
-}

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] __MINGW_GNUC_PREREQ vs clang

2017-11-24 Thread Mateusz Mikuła
Clang defines itself as GCC 4.2.1 which can cause issues like multiple
definitions of `__m64`, `__m128`, ... coming from crt/intrin.h when
`-march=i686` is used when building compiler-rt.
When I override it for clang to return false compiler-rt builds fine with
`-march=i686`.

I think it's a good idea to stop treating clang like few years outdated gcc
version.
Any thoughts?
--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCH] headers: Implement the conio.h printf/scanf functions for ucrtbase

2017-11-24 Thread Martin Storsjö

On Fri, 24 Nov 2017, Jacek Caban wrote:


On 24.11.2017 11:37, Martin Storsjö wrote:

MSVC doesn't provide these functions as global symbols at the linker
level, but there you must include a header to make them work.

Additionally, for the wchar versions, you can currently override the
behaviour by setting UCRTBASE_PRINTF_DEFAULT_WIDE, but if we move them
to statically compiled objects in libucrtbase.a, we can't do that any
longer.


Okay, sounds good to me. The patch looks good as well.


Thanks - pushed.

// Martin
--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCH] headers: Implement the conio.h printf/scanf functions for ucrtbase

2017-11-24 Thread Jacek Caban
On 24.11.2017 11:37, Martin Storsjö wrote:
> MSVC doesn't provide these functions as global symbols at the linker
> level, but there you must include a header to make them work.
>
> Additionally, for the wchar versions, you can currently override the
> behaviour by setting UCRTBASE_PRINTF_DEFAULT_WIDE, but if we move them
> to statically compiled objects in libucrtbase.a, we can't do that any
> longer. 

Okay, sounds good to me. The patch looks good as well.

Thanks,
Jacek

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCH] ucrtbase: Make sure that compat symbols aren't autoexported

2017-11-24 Thread Martin Storsjö

On Thu, 23 Nov 2017, Sven Kretzschmar wrote:


I will try to add the 2 missing references in the way you hinted at in your
post.


FWIW, for the _cprintf one, the conio.h patch that I sent should be a 
proper fix.


The other one requires fixing stdio_s.h, and it's a truly huge number of 
functions there. I started looking at it, but don't have time to do them 
all right now. Attached is my work in progress for this header, that 
should cover at least the function that you mentioned so far.


That one isn't sent for review yet as it's quite incomplete. OTOH, perhaps 
it's better to at least fix up some subsets of it, that happens to be 
used, instead of aiming for all of them.


// MartinFrom 53f8cc4ba4ec693fb0324e220b7e4b952635fb79 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= 
Date: Fri, 24 Nov 2017 13:58:21 +0200
Subject: [PATCH] WIP: Map some functions in stdio_s.h for ucrtbase

This is still incomplete.
---
 mingw-w64-headers/crt/sec_api/stdio_s.h | 202 +++-
 1 file changed, 196 insertions(+), 6 deletions(-)

diff --git a/mingw-w64-headers/crt/sec_api/stdio_s.h b/mingw-w64-headers/crt/sec_api/stdio_s.h
index 092f337..08f519d 100644
--- a/mingw-w64-headers/crt/sec_api/stdio_s.h
+++ b/mingw-w64-headers/crt/sec_api/stdio_s.h
@@ -26,8 +26,195 @@ extern "C" {
 #ifndef _STDIO_S_DEFINED
 #define _STDIO_S_DEFINED
   _CRTIMP errno_t __cdecl clearerr_s(FILE *_File);
-  int __cdecl fprintf_s(FILE *_File,const char *_Format,...);
+
   size_t __cdecl fread_s(void *_DstBuf,size_t _DstSize,size_t _ElementSize,size_t _Count,FILE *_File);
+
+#if __MSVCRT_VERSION__ >= 0x1400
+  int __cdecl __stdio_common_vsprintf_s(unsigned __int64 _Options, char *_Str, size_t _Len, const char *_Format, _locale_t _Locale, va_list _ArgList);
+  int __cdecl __stdio_common_vsnprintf_s(unsigned __int64 _Options, char *_Str, size_t _Len, size_t _MaxCount, const char *_Format, _locale_t _Locale, va_list _ArgList);
+  int __cdecl __stdio_common_vsprintf_p(unsigned __int64 _Options, char *_Str, size_t _Len, const char *_Format, _locale_t _Locale, va_list _ArgList);
+  int __cdecl __stdio_common_vfprintf_s(unsigned __int64 _Options, FILE *_File, const char *_Format, _locale_t _Locale, va_list _ArgList);
+  int __cdecl __stdio_common_vfprintf_p(unsigned __int64 _Options, FILE *_File, const char *_Format, _locale_t _Locale, va_list _ArgList);
+
+  __mingw_ovr int __cdecl fprintf_s(FILE *_File,const char *_Format,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Format);
+_Ret = __stdio_common_vfprintf_s(0, _File, _Format, NULL, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl _fscanf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Locale);
+_Ret = __stdio_common_vfscanf_s(0, _File, _Format, _Locale, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl printf_s(const char *_Format,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Format);
+_Ret = __stdio_common_vfprintf_s(0, stdout, _Format, NULL, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl _scanf_l(const char *_Format,_locale_t _Locale,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Locale);
+_Ret = __stdio_common_vfscanf(0, stdin, _Format, _Locale, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl _scanf_s_l(const char *_Format,_locale_t _Locale,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Locale);
+_Ret = __stdio_common_vfscanf_s(0, stdin, _Format, _Locale, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  // TODO: Not mapped for ucrtbase yet
+  _CRTIMP int __cdecl _snprintf_c(char *_DstBuf,size_t _MaxCount,const char *_Format,...);
+  _CRTIMP int __cdecl _vsnprintf_c(char *_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
+
+  __mingw_ovr int __cdecl _fscanf_l(FILE *_File,const char *_Format,_locale_t _Locale,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Locale);
+_Ret = __stdio_common_vfscanf(0, _File, _Format, _Locale, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl _sscanf_l(const char *_Src,const char *_Format,_locale_t _Locale,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Locale);
+_Ret = __stdio_common_vsscanf(0, _Src, (size_t)-1, _Format, _Locale, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl _sscanf_s_l(const char *_Src,const char *_Format,_locale_t _Locale,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+

Re: [Mingw-w64-public] [PATCH] headers: Implement the conio.h printf/scanf functions for ucrtbase

2017-11-24 Thread Martin Storsjö

On Fri, 24 Nov 2017, Jacek Caban wrote:


Hi Martin,


On 11/24/17 11:03 AM, Martin Storsjö wrote:

---
  mingw-w64-headers/crt/conio.h | 214 
+-

  1 file changed, 209 insertions(+), 5 deletions(-)


Since we already know that we often need such functions in libucrtbase.a, 
wouldn't it make more sense to add new functions there?


I'd rather make that the exception instead of the rule.

It's already quite painful to do the mapping of them, and having to add 
new files for all of them would make it another order of magnitude more 
work. I'm currently looking at filling in some gaps in sec_api/stdio_s.h, 
and that's just around 60 functions just for the narrow-char functions.


MSVC doesn't provide these functions as global symbols at the linker 
level, but there you must include a header to make them work.


Additionally, for the wchar versions, you can currently override the 
behaviour by setting UCRTBASE_PRINTF_DEFAULT_WIDE, but if we move them to 
statically compiled objects in libucrtbase.a, we can't do that any longer.


// Martin
--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] [PATCHv2] headers: Implement the conio.h printf/scanf functions for ucrtbase

2017-11-24 Thread Martin Storsjö
Some declarations were moved slightly, to reduce the amount of
ifdeffing needed.

I only provide the same set of functions as before, not (yet?)
the full set of functions possible with the ucrtbase common
functions.

Signed-off-by: Martin Storsjö 
---
v2: Fixed the parameter to __builtin_va_start which needs to be _Locale
in some of the cases.
---
 mingw-w64-headers/crt/conio.h | 214 +-
 1 file changed, 209 insertions(+), 5 deletions(-)

diff --git a/mingw-w64-headers/crt/conio.h b/mingw-w64-headers/crt/conio.h
index 91ad9a0..5a90de2 100644
--- a/mingw-w64-headers/crt/conio.h
+++ b/mingw-w64-headers/crt/conio.h
@@ -8,17 +8,121 @@
 
 #include 
 
+#if !defined(_UCRTBASE_STDIO_DEFINED) && __MSVCRT_VERSION__ >= 0x1400
+#define _UCRTBASE_STDIO_DEFINED
+
+#define UCRTBASE_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION (0x0001)
+#define UCRTBASE_PRINTF_STANDARD_SNPRINTF_BEHAVIOUR  (0x0002)
+#define UCRTBASE_PRINTF_LEGACY_WIDE_SPECIFIERS   (0x0004)
+#define UCRTBASE_PRINTF_LEGACY_MSVCRT_COMPATIBILITY  (0x0008)
+#define UCRTBASE_PRINTF_LEGACY_THREE_DIGIT_EXPONENTS (0x0010)
+
+#define UCRTBASE_SCANF_SECURECRT (0x0001)
+#define UCRTBASE_SCANF_LEGACY_WIDE_SPECIFIERS(0x0002)
+#define UCRTBASE_SCANF_LEGACY_MSVCRT_COMPATIBILITY   (0x0004)
+
+// Default wide printfs and scanfs to the standard mode
+#ifndef UCRTBASE_PRINTF_DEFAULT_WIDE
+#define UCRTBASE_PRINTF_DEFAULT_WIDE 0
+#endif
+#ifndef UCRTBASE_SCANF_DEFAULT_WIDE
+#define UCRTBASE_SCANF_DEFAULT_WIDE 0
+#endif
+#endif
+
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
   _CRTIMP char *_cgets(char *_Buffer) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
-  _CRTIMP int __cdecl _cprintf(const char * __restrict__ _Format,...);
   _CRTIMP int __cdecl _cputs(const char *_Str);
-  _CRTIMP int __cdecl _cscanf(const char * __restrict__ _Format,...) 
__MINGW_ATTRIB_DEPRECATED_SEC_WARN;
-  _CRTIMP int __cdecl _cscanf_l(const char * __restrict__ _Format,_locale_t 
_Locale,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
   _CRTIMP int __cdecl _getch(void);
   _CRTIMP int __cdecl _getche(void);
+  _CRTIMP int __cdecl _kbhit(void);
+
+#if __MSVCRT_VERSION__ >= 0x1400
+  int __cdecl __conio_common_vcprintf(unsigned __int64 _Options, const char 
*_Format, _locale_t _Locale, va_list _ArgList);
+  int __cdecl __conio_common_vcprintf_p(unsigned __int64 _Options, const char 
*_Format, _locale_t _Locale, va_list _ArgList);
+  int __cdecl __conio_common_vcprintf_s(unsigned __int64 _Options, const char 
*_Format, _locale_t _Locale, va_list _ArgList);
+  int __cdecl __conio_common_vcscanf(unsigned __int64 _Options, const char 
*_Format, _locale_t _Locale, va_list _ArgList);
+
+  __mingw_ovr int __cdecl _vcprintf(const char * __restrict__ _Format,va_list 
_ArgList)
+  {
+return __conio_common_vcprintf(0, _Format, NULL, _ArgList);
+  }
+  __mingw_ovr int __cdecl _cprintf(const char * __restrict__ _Format,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Format);
+_Ret = _vcprintf(_Format, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl _cscanf(const char * __restrict__ _Format,...) 
__MINGW_ATTRIB_DEPRECATED_SEC_WARN
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Format);
+_Ret = __conio_common_vcscanf(0, _Format, NULL, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl _cscanf_l(const char * __restrict__ 
_Format,_locale_t _Locale,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Locale);
+_Ret = __conio_common_vcscanf(0, _Format, _Locale, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+
+  __mingw_ovr int __cdecl _vcprintf_p(const char * __restrict__ 
_Format,va_list _ArgList)
+  {
+return __conio_common_vcprintf_p(0, _Format, NULL, _ArgList);
+  }
+  __mingw_ovr int __cdecl _cprintf_p(const char * __restrict__ _Format,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Format);
+_Ret = _vcprintf_p(_Format, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl _vcprintf_l(const char * __restrict__ 
_Format,_locale_t _Locale,va_list _ArgList)
+  {
+return __conio_common_vcprintf(0, _Format, _Locale, _ArgList);
+  }
+  __mingw_ovr int __cdecl _cprintf_l(const char * __restrict__ 
_Format,_locale_t _Locale,...)
+  {
+__builtin_va_list _ArgList;
+int _Ret;
+__builtin_va_start(_ArgList, _Locale);
+_Ret = _vcprintf_l(_Format, _Locale, _ArgList);
+__builtin_va_end(_ArgList);
+return _Ret;
+  }
+  __mingw_ovr int __cdecl _vcprintf_p_l(const char * __restrict__ 
_Format,_locale_t _Locale,va_list _ArgList)
+  {
+return __conio_common_vcprintf_p(0, _Format, _Locale, _ArgList);
+  }
+  __mingw_ovr int __cdecl 

Re: [Mingw-w64-public] [PATCH] headers: Implement the conio.h printf/scanf functions for ucrtbase

2017-11-24 Thread Jacek Caban

Hi Martin,


On 11/24/17 11:03 AM, Martin Storsjö wrote:

---
  mingw-w64-headers/crt/conio.h | 214 +-
  1 file changed, 209 insertions(+), 5 deletions(-)


Since we already know that we often need such functions in 
libucrtbase.a, wouldn't it make more sense to add new functions there?


Thanks,
Jacek

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public