diff options
Diffstat (limited to 'winsup/mingw/mingwex/stdio')
-rw-r--r-- | winsup/mingw/mingwex/stdio/snprintf.c | 13 | ||||
-rw-r--r-- | winsup/mingw/mingwex/stdio/snwprintf.c | 13 | ||||
-rw-r--r-- | winsup/mingw/mingwex/stdio/vfscanf.c | 40 | ||||
-rw-r--r-- | winsup/mingw/mingwex/stdio/vfwscanf.c | 42 | ||||
-rw-r--r-- | winsup/mingw/mingwex/stdio/vscanf.c | 9 | ||||
-rw-r--r-- | winsup/mingw/mingwex/stdio/vsnprintf.c | 5 | ||||
-rw-r--r-- | winsup/mingw/mingwex/stdio/vsnwprintf.c | 5 | ||||
-rw-r--r-- | winsup/mingw/mingwex/stdio/vsscanf.c | 41 | ||||
-rw-r--r-- | winsup/mingw/mingwex/stdio/vswscanf.c | 43 | ||||
-rw-r--r-- | winsup/mingw/mingwex/stdio/vwscanf.c | 9 |
10 files changed, 220 insertions, 0 deletions
diff --git a/winsup/mingw/mingwex/stdio/snprintf.c b/winsup/mingw/mingwex/stdio/snprintf.c new file mode 100644 index 000000000..c8d2a7b20 --- /dev/null +++ b/winsup/mingw/mingwex/stdio/snprintf.c @@ -0,0 +1,13 @@ +#include <stdarg.h> +#include <stdio.h> + +int snprintf(char* buffer, size_t n, const char* format, ...) +{ + int retval; + va_list argptr; + + va_start( argptr, format ); + retval = _vsnprintf( buffer, n, format, argptr ); + va_end( argptr ); + return retval; +} diff --git a/winsup/mingw/mingwex/stdio/snwprintf.c b/winsup/mingw/mingwex/stdio/snwprintf.c new file mode 100644 index 000000000..42b05b292 --- /dev/null +++ b/winsup/mingw/mingwex/stdio/snwprintf.c @@ -0,0 +1,13 @@ +#include <stdarg.h> +#include <wchar.h> + +int snwprintf(wchar_t* buffer, size_t n, const wchar_t* format, ...) +{ + int retval; + va_list argptr; + + va_start( argptr, format ); + retval = _vsnwprintf( buffer, n, format, argptr ); + va_end( argptr ); + return retval; +} diff --git a/winsup/mingw/mingwex/stdio/vfscanf.c b/winsup/mingw/mingwex/stdio/vfscanf.c new file mode 100644 index 000000000..41549f9e4 --- /dev/null +++ b/winsup/mingw/mingwex/stdio/vfscanf.c @@ -0,0 +1,40 @@ +// By aaronwl 2003-01-28 for mingw-msvcrt +// Public domain: all copyrights disclaimed, absolutely no warranties */ + +#include <stdarg.h> +#include <stdio.h> + +int vfscanf(FILE * __restrict__ stream, const char * __restrict__ format, va_list arg) { + int ret; + + __asm__( + + /* allocate stack (esp += frame - arg3 - (8[arg1,2] + 12)) */ + "movl %%esp, %%ebx\n\t" + "lea 0xFFFFFFEC(%%esp, %6), %%esp\n\t" + "subl %5, %%esp\n\t" + + // set up stack + "movl %1, 0xC(%%esp)\n\t" // stream + "movl %2, 0x10(%%esp)\n\t" // format + "lea 0x14(%%esp), %%edi\n\t" + "movl %%edi, (%%esp)\n\t" // memcpy dest + "movl %5, 0x4(%%esp)\n\t" // memcpy src + "movl %5, 0x8(%%esp)\n\t" + "subl %6, 0x8(%%esp)\n\t" // memcpy len + "call _memcpy\n\t" + "addl $12, %%esp\n\t" + + // call fscanf + "call _fscanf\n\t" + + // restore stack + "movl %%ebx, %%esp\n\t" + + : "=a"(ret), "=c"(stream), "=d"(format) + : "1"(stream), "2"(format), "S"(arg), + "a"(&ret) + : "ebx"); + + return ret; +} diff --git a/winsup/mingw/mingwex/stdio/vfwscanf.c b/winsup/mingw/mingwex/stdio/vfwscanf.c new file mode 100644 index 000000000..8fa33376e --- /dev/null +++ b/winsup/mingw/mingwex/stdio/vfwscanf.c @@ -0,0 +1,42 @@ +// By aaronwl 2003-01-28 for mingw-msvcrt. +// Public domain: all copyrights disclaimed, absolutely no warranties. + +#include <stdarg.h> +#include <wchar.h> + +int vfwscanf(FILE * __restrict__ stream, const wchar_t * __restrict__ format, + va_list arg) { + + int ret; + + __asm__( + + // allocate stack (esp += frame - arg3 - (8[arg1,2] + 12)) + "movl %%esp, %%ebx\n\t" + "lea 0xFFFFFFEC(%%esp, %6), %%esp\n\t" + "subl %5, %%esp\n\t" + + // set up stack + "movl %1, 0xC(%%esp)\n\t" // stream + "movl %2, 0x10(%%esp)\n\t" // format + "lea 0x14(%%esp), %%edi\n\t" + "movl %%edi, (%%esp)\n\t" // memcpy dest + "movl %5, 0x4(%%esp)\n\t" // memcpy src + "movl %5, 0x8(%%esp)\n\t" + "subl %6, 0x8(%%esp)\n\t" // memcpy len + "call _memcpy\n\t" + "addl $12, %%esp\n\t" + + // call fscanf + "call _fwscanf\n\t" + + // restore stack + "movl %%ebx, %%esp\n\t" + + : "=a"(ret), "=c"(stream), "=d"(format) + : "1"(stream), "2"(format), "S"(arg), + "a"(&ret) + : "ebx"); + + return ret; +} diff --git a/winsup/mingw/mingwex/stdio/vscanf.c b/winsup/mingw/mingwex/stdio/vscanf.c new file mode 100644 index 000000000..53f543442 --- /dev/null +++ b/winsup/mingw/mingwex/stdio/vscanf.c @@ -0,0 +1,9 @@ +// By aaronwl 2003-01-28 for mingw-msvcrt +// Public domain: all copyrights disclaimed, absolutely no warranties + +#include <stdarg.h> +#include <stdio.h> + +int vscanf(const char * __restrict__ format, va_list arg) { + return vfscanf(stdin, format, arg); +} diff --git a/winsup/mingw/mingwex/stdio/vsnprintf.c b/winsup/mingw/mingwex/stdio/vsnprintf.c new file mode 100644 index 000000000..f3dce5b67 --- /dev/null +++ b/winsup/mingw/mingwex/stdio/vsnprintf.c @@ -0,0 +1,5 @@ +#include <stdarg.h> +#include <stdio.h> + +int vsnprintf (char* s, size_t n, const char* format, va_list arg) + { return _vsnprintf ( s, n, format, arg); } diff --git a/winsup/mingw/mingwex/stdio/vsnwprintf.c b/winsup/mingw/mingwex/stdio/vsnwprintf.c new file mode 100644 index 000000000..1b59a078b --- /dev/null +++ b/winsup/mingw/mingwex/stdio/vsnwprintf.c @@ -0,0 +1,5 @@ +#include <stdarg.h> +#include <wchar.h> + +int vsnwprintf(wchar_t *buffer, size_t n, const wchar_t * format, va_list argptr) + { return _vsnwprintf( buffer, n, format, argptr );} diff --git a/winsup/mingw/mingwex/stdio/vsscanf.c b/winsup/mingw/mingwex/stdio/vsscanf.c new file mode 100644 index 000000000..33fd333ae --- /dev/null +++ b/winsup/mingw/mingwex/stdio/vsscanf.c @@ -0,0 +1,41 @@ +// By aaronwl 2003-01-28 for mingw-msvcrt. +// Public domain: all copyrights disclaimed, absolutely no warranties. + +#include <stdarg.h> +#include <stdio.h> + + +int vsscanf(const char * __restrict__ s, const char * __restrict__ format, va_list arg) { + int ret; + + __asm__( + + // allocate stack (esp += frame - arg3 - (8[arg1,2] + 12)) + "movl %%esp, %%ebx\n\t" + "lea 0xFFFFFFEC(%%esp, %6), %%esp\n\t" + "subl %5, %%esp\n\t" + + // set up stack + "movl %1, 0xC(%%esp)\n\t" // s + "movl %2, 0x10(%%esp)\n\t" // format + "lea 0x14(%%esp), %%edi\n\t" + "movl %%edi, (%%esp)\n\t" // memcpy dest + "movl %5, 0x4(%%esp)\n\t" // memcpy src + "movl %5, 0x8(%%esp)\n\t" + "subl %6, 0x8(%%esp)\n\t" // memcpy len + "call _memcpy\n\t" + "addl $12, %%esp\n\t" + + // call sscanf + "call _sscanf\n\t" + + // restore stack + "movl %%ebx, %%esp\n\t" + + : "=a"(ret), "=c"(s), "=d"(format) + : "1"(s), "2"(format), "S"(arg), + "a"(&ret) + : "ebx"); + + return ret; +} diff --git a/winsup/mingw/mingwex/stdio/vswscanf.c b/winsup/mingw/mingwex/stdio/vswscanf.c new file mode 100644 index 000000000..20a0f85f5 --- /dev/null +++ b/winsup/mingw/mingwex/stdio/vswscanf.c @@ -0,0 +1,43 @@ +// By aaronwl 2003-01-28 for mingw-msvcrt +// Public domain: all copyrights disclaimed, absolutely no warranties */ + +#include <stdarg.h> +#include <wchar.h> + + +int vswscanf(const wchar_t * __restrict__ s, const wchar_t * __restrict__ format, + va_list arg) { + + int ret; + + __asm__( + + // allocate stack (esp += frame - arg3 - (8[arg1,2] + 12)) + "movl %%esp, %%ebx\n\t" + "lea 0xFFFFFFEC(%%esp, %6), %%esp\n\t" + "subl %5, %%esp\n\t" + + // set up stack + "movl %1, 0xC(%%esp)\n\t" // s + "movl %2, 0x10(%%esp)\n\t" // format + "lea 0x14(%%esp), %%edi\n\t" + "movl %%edi, (%%esp)\n\t" // memcpy dest + "movl %5, 0x4(%%esp)\n\t" // memcpy src + "movl %5, 0x8(%%esp)\n\t" + "subl %6, 0x8(%%esp)\n\t" // memcpy len + "call _memcpy\n\t" + "addl $12, %%esp\n\t" + + // call sscanf + "call _swscanf\n\t" + + // restore stack + "movl %%ebx, %%esp\n\t" + + : "=a"(ret), "=c"(s), "=d"(format) + : "1"(s), "2"(format), "S"(arg), + "a"(&ret) + : "ebx"); + + return ret; +} diff --git a/winsup/mingw/mingwex/stdio/vwscanf.c b/winsup/mingw/mingwex/stdio/vwscanf.c new file mode 100644 index 000000000..c8f53eef2 --- /dev/null +++ b/winsup/mingw/mingwex/stdio/vwscanf.c @@ -0,0 +1,9 @@ +// By aaronwl 2003-01-28 for mingw-msvcrt. +// Public domain: all copyrights disclaimed, absolutely no warranties. + +#include <stdarg.h> +#include <wchar.h> + +int vwscanf(const wchar_t * __restrict__ format, va_list arg) { + return vfwscanf(stdin, format, arg); +} |