diff options
author | Danny Smith <dannysmith@users.sourceforge.net> | 2003-03-02 07:00:48 +0000 |
---|---|---|
committer | Danny Smith <dannysmith@users.sourceforge.net> | 2003-03-02 07:00:48 +0000 |
commit | 4aa3feb8991e4d1ecf1c4915d25ab88863e84ef6 (patch) | |
tree | db4e5cdc43924d9733fcf116704e1da554902e7d /winsup/mingw/mingwex/stdio/vsscanf.c | |
parent | 408e9b2fd4082dbc5bbfc581f5e6167924de399e (diff) | |
download | cygnal-4aa3feb8991e4d1ecf1c4915d25ab88863e84ef6.tar.gz cygnal-4aa3feb8991e4d1ecf1c4915d25ab88863e84ef6.tar.bz2 cygnal-4aa3feb8991e4d1ecf1c4915d25ab88863e84ef6.zip |
2003-03-02 Danny Smith <dannysmith@users.sourceforge.net>
* include/stdio.h (vscanf): Add prototype.
(vfscanf): Ditto.
(vsscanf): Ditto.
(vwscanf): Ditto.
(vfwscanf): Ditto.
(vswscanf): Ditto.
* include/wchar.h (vwscanf): Add prototype.
(vfwscanf): Ditto.
(vswscanf): Ditto.
* mingwex/snprintf.c: Move to mingwex/stdio.
* mingwex/vsnprintf.c: Ditto.
* mingwex/snwprintf.c: Ditto.
* mingwex/vsnwprintf.c: Ditto.
* mingwex/Makefile.in (VPATH): Add $(srcdir)/stdio
(STDIO_DISTFILES): Add.
(DISTFILES): Adjust.
(STDIO_STUB_OBJS): Rename to STDIO_OBJS and add v*scanf objects.
(LIB_OBJS): Adjust.
(dist): Adjust.
2003-03-02 Aaron W LaFramboise <AWLaFramboise@aol.com>
* mingwex/stdio: New directory
* mingwex/stdio/vfscanf.c: New file.
* mingwex/stdio/vfwscanf.c: New file.
* mingwex/stdio/vscanf.c: New file.
* mingwex/stdio/vsscanf.c: New file.
* mingwex/stdio/vswscanf.c: New file.
* mingwex/stdio/vwscanf.c: New file.
Diffstat (limited to 'winsup/mingw/mingwex/stdio/vsscanf.c')
-rw-r--r-- | winsup/mingw/mingwex/stdio/vsscanf.c | 41 |
1 files changed, 41 insertions, 0 deletions
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; +} |