Re: valgrind for WINE (part 2 - uninitialized memory fixes) PATCHRESEND TAKE 2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm not convinced that the first attempt to resend this patch made it to
the list - please ignore the first resend if it does as it still has a
couple of missing tabs.

so - attached is a hopefully working patch for the architecture changes
needed to WINE to allow valgrind to check it. this time with all the
tabs in the right places ;-)

sorry for the multiple (large) patches - hopefully they are worth it!

Index: Makefile.in
===================================================================
RCS file: /home/wine/wine/Makefile.in,v
retrieving revision 1.143
diff -u -r1.143 Makefile.in
--- Makefile.in	23 Mar 2003 20:00:04 -0000	1.143
+++ Makefile.in	28 Mar 2003 21:41:49 -0000
@@ -57,7 +57,7 @@
 	dlls \
 	programs
 
-all: Make.rules wine
+all: Make.rules wine wine.vg
 	@echo "Wine build complete."
 
 WINAPI_CHECK_EXTRA_FLAGS = --global
@@ -69,6 +69,9 @@
 	@exit 1
 
 wine: $(WINEWRAPPER)
+	$(RM) $@ && $(LN_S) $(WINEWRAPPER) $@
+
+wine.vg: $(WINEWRAPPER)
 	$(RM) $@ && $(LN_S) $(WINEWRAPPER) $@
 
 # Installation rules
Index: configure
===================================================================
RCS file: /home/wine/wine/configure,v
retrieving revision 1.410
diff -u -r1.410 configure
--- configure	28 Mar 2003 00:36:13 -0000	1.410
+++ configure	28 Mar 2003 21:42:23 -0000
@@ -13457,6 +13457,8 @@
 
 
 
+
+
 for ac_header in \
 	arpa/inet.h \
 	arpa/nameser.h \
@@ -13528,6 +13530,7 @@
 	termios.h \
 	unistd.h \
 	utime.h \
+	valgrind/memcheck.h \
 
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
Index: configure.ac
===================================================================
RCS file: /home/wine/wine/configure.ac,v
retrieving revision 1.139
diff -u -r1.139 configure.ac
--- configure.ac	28 Mar 2003 00:36:13 -0000	1.139
+++ configure.ac	28 Mar 2003 21:42:26 -0000
@@ -1070,6 +1070,7 @@
 	termios.h \
 	unistd.h \
 	utime.h \
+	valgrind/memcheck.h
 )
 AC_HEADER_STAT()
 
Index: dlls/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/Makefile.in,v
retrieving revision 1.170
diff -u -r1.170 Makefile.in
--- dlls/Makefile.in	21 Mar 2003 00:42:39 -0000	1.170
+++ dlls/Makefile.in	28 Mar 2003 22:14:11 -0000
@@ -130,6 +130,18 @@
 
 @MAKE_RULES@
 
+msvcrtd/__install__: dummy
+       cd msvcrt && $(MAKE) install MODULE=msvcrtd.dll
+
+msvcrtd: dummy
+       @cd msvcrt && $(MAKE) MODULE=msvcrtd.dll
+
+msvcrtd/__install__: dummy
+       cd msvcrt && $(MAKE) install MODULE=msvcrtd.dll
+
+msvcrtd: dummy
+       @cd msvcrt && $(MAKE) MODULE=msvcrtd.dll
+
 WIN16_FILES = \
 	avifile.dll$(DLLEXT) \
 	comm.dll$(DLLEXT) \
@@ -228,6 +240,7 @@
 	msnet32.dll$(DLLEXT) \
 	msrle32.dll$(DLLEXT) \
 	msvcrt.dll$(DLLEXT) \
+	msvcrtd.dll$(DLLEXT) \
 	msvcrt20.dll$(DLLEXT) \
 	msvfw32.dll$(DLLEXT) \
 	netapi32.dll$(DLLEXT) \
@@ -433,6 +446,9 @@
 msvcrt.dll$(DLLEXT): msvcrt/msvcrt.dll$(DLLEXT)
 	$(RM) $@ && $(LN_S) msvcrt/msvcrt.dll$(DLLEXT) $@
 
+msvcrtd.dll$(DLLEXT): msvcrt/msvcrtd.dll$(DLLEXT)
+	$(RM) $@ && $(LN_S) msvcrt/msvcrtd.dll$(DLLEXT) $@
+
 msvcrt20.dll$(DLLEXT): msvcrt20/msvcrt20.dll$(DLLEXT)
 	$(RM) $@ && $(LN_S) msvcrt20/msvcrt20.dll$(DLLEXT) $@
 
@@ -872,6 +888,11 @@
 libmsvcrt.a: msvcrt/msvcrt.spec.def
 	$(DLLTOOL) -k -l $@ -d msvcrt/msvcrt.spec.def
 
+libmsvcrtd.def: msvcrt/msvcrtd.spec.def
+	$(RM) $@ && $(LN_S) msvcrt/msvcrtd.spec.def $@
+libmsvcrtd.a: msvcrt/msvcrtd.spec.def
+	$(DLLTOOL) -k -l $@ -d msvcrt/msvcrtd.spec.def
+
 libmsvcrt20.def: msvcrt20/msvcrt20.spec.def
 	$(RM) $@ && $(LN_S) msvcrt20/msvcrt20.spec.def $@
 libmsvcrt20.a: msvcrt20/msvcrt20.spec.def
@@ -1144,6 +1165,7 @@
 msnet32/msnet32.spec.def: $(WINEBUILD)
 msvideo/msrle32/msrle32.spec.def: $(WINEBUILD)
 msvcrt/msvcrt.spec.def: $(WINEBUILD)
+msvcrt/msvcrtd.spec.def: $(WINEBUILD)
 msvcrt20/msvcrt20.spec.def: $(WINEBUILD)
 msvideo/msvfw32.spec.def: $(WINEBUILD)
 netapi32/netapi32.spec.def: $(WINEBUILD)
@@ -1246,6 +1268,7 @@
 msnet32/msnet32.dll$(DLLEXT): msnet32
 msvideo/msrle32/msrle32.dll$(DLLEXT): msvideo/msrle32
 msvcrt/msvcrt.dll$(DLLEXT): msvcrt
+msvcrt/msvcrtd.dll$(DLLEXT): msvcrtd
 msvcrt20/msvcrt20.dll$(DLLEXT): msvcrt20
 msvideo/msvfw32.dll$(DLLEXT): msvideo
 netapi32/netapi32.dll$(DLLEXT): netapi32
@@ -1352,6 +1375,7 @@
 msnet32/__install__: msnet32.dll$(DLLEXT)
 msvideo/msrle32/__install__: msrle32.dll$(DLLEXT)
 msvcrt/__install__: msvcrt.dll$(DLLEXT)
+msvcrtd/__install__: msvcrtd.dll$(DLLEXT)
 msvcrt20/__install__: msvcrt20.dll$(DLLEXT)
 msvideo/__install__: msvfw32.dll$(DLLEXT)
 netapi32/__install__: netapi32.dll$(DLLEXT)
@@ -1419,7 +1443,7 @@
 uninstall::
 	$(RM) $(LINKABLE_DLLS:%=$(libdir)/lib%.$(LIBEXT))
 
-install install-lib:: $(INSTALLSUBDIRS:%=%/__install__)
+install install-lib:: $(INSTALLSUBDIRS:%=%/__install__) msvcrtd/__install__
 	$(RM) $(LINKABLE_DLLS:%=$(libdir)/lib%.$(LIBEXT))
 	cd $(libdir) && if [ "$(dlldir)" = "$(libdir)/wine" ]; \
 	then \
Index: dlls/msvcrt/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/Makefile.in,v
retrieving revision 1.13
diff -u -r1.13 Makefile.in
--- dlls/msvcrt/Makefile.in	15 Mar 2003 22:25:01 -0000	1.13
+++ dlls/msvcrt/Makefile.in	28 Mar 2003 21:42:32 -0000
@@ -17,6 +17,7 @@
 	cppexcept.c \
 	ctype.c \
 	data.c \
+	debug.c \
 	dir.c \
 	environ.c \
 	errno.c \
Index: dlls/ntdll/heap.c
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/heap.c,v
retrieving revision 1.16
diff -u -r1.16 heap.c
--- dlls/ntdll/heap.c	18 Mar 2003 18:35:49 -0000	1.16
+++ dlls/ntdll/heap.c	28 Mar 2003 21:42:36 -0000
@@ -36,6 +36,22 @@
 #include "thread.h"
 #include "wine/debug.h"
 
+#ifdef HAVE_VALGRIND_MEMCHECK_H
+
+#include <valgrind/memcheck.h>
+
+#define MARK_INACCESSIBLE(p,l) VALGRIND_DISCARD( VALGRIND_MAKE_NOACCESS( (p), (l) ) )
+#define MARK_UNINITIALIZED(p,l) VALGRIND_DISCARD( VALGRIND_MAKE_WRITABLE( (p), (l) ) )
+#define MARKING_HEAP 1
+
+#else /* VALGRIND */
+
+#define MARK_INACCESSIBLE(p,l)
+#define MARK_UNINITIALIZED(p,l)
+#define MARKING_HEAP 0
+
+#endif /* VALGRIND */
+
 WINE_DEFAULT_DEBUG_CHANNEL(heap);
 
 /* Note: the heap data structures are based on what Pietrek describes in his
@@ -347,19 +363,28 @@
     ARENA_FREE *pFree;
 
     /* Create a free arena */
-
+    MARK_UNINITIALIZED( ptr, sizeof( ARENA_FREE ) );
     pFree = (ARENA_FREE *)ptr;
     pFree->magic = ARENA_FREE_MAGIC;
 
     /* If debugging, erase the freed block content */
 
-    if (TRACE_ON(heap))
+    if (MARKING_HEAP || TRACE_ON(heap))
     {
         char *pEnd = (char *)ptr + size;
         if (pEnd > (char *)subheap + subheap->commitSize)
             pEnd = (char *)subheap + subheap->commitSize;
         if (pEnd > (char *)(pFree + 1))
-            memset( pFree + 1, ARENA_FREE_FILLER, pEnd - (char *)(pFree + 1) );
+        {
+            if ( MARKING_HEAP )
+            {
+                MARK_INACCESSIBLE( pFree + 1, pEnd - (char *)(pFree + 1) );
+            }
+            else
+            {
+                memset( pFree + 1, ARENA_FREE_FILLER, pEnd - (char *)(pFree + 1) );
+            }
+        }
     }
 
     /* Check if next block is free also */
@@ -372,8 +397,14 @@
         pNext->next->prev = pNext->prev;
         pNext->prev->next = pNext->next;
         size += (pNext->size & ARENA_SIZE_MASK) + sizeof(*pNext);
-        if (TRACE_ON(heap))
+        if ( MARKING_HEAP )
+        {
+            MARK_INACCESSIBLE( pNext, sizeof(ARENA_FREE) );
+        }
+        else if (TRACE_ON(heap))
+        {
             memset( pNext, ARENA_FREE_FILLER, sizeof(ARENA_FREE) );
+        }
     }
 
     /* Set the next block PREV_FREE flag and pointer */
@@ -382,6 +413,7 @@
     {
         DWORD *pNext = (DWORD *)((char *)ptr + size);
         *pNext |= ARENA_FLAG_PREV_FREE;
+        MARK_UNINITIALIZED( pNext - 1, sizeof( ARENA_FREE * ) );
         *(ARENA_FREE **)(pNext - 1) = pFree;
     }
 
@@ -1088,10 +1120,13 @@
 
     HEAP_ShrinkBlock( subheap, pInUse, size );
 
+    MARK_UNINITIALIZED( pInUse + 1, pInUse->size & ARENA_SIZE_MASK );
     if (flags & HEAP_ZERO_MEMORY)
         memset( pInUse + 1, 0, pInUse->size & ARENA_SIZE_MASK );
     else if (TRACE_ON(heap))
+    {
         memset( pInUse + 1, ARENA_INUSE_FILLER, pInUse->size & ARENA_SIZE_MASK );
+    }
 
     if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
 
@@ -1254,6 +1289,7 @@
                            + sizeof(ARENA_FREE) - sizeof(ARENA_INUSE);
             pInUse->magic = ARENA_INUSE_MAGIC;
             HEAP_ShrinkBlock( newsubheap, pInUse, size );
+            MARK_UNINITIALIZED( pInUse + 1, oldSize );
             memcpy( pInUse + 1, pArena + 1, oldSize );
 
             /* Free the previous block */
@@ -1269,12 +1305,15 @@
 
     if (size > oldSize)
     {
+        MARK_UNINITIALIZED( (char *)(pArena + 1) + oldSize, (pArena->size & ARENA_SIZE_MASK) - oldSize );
         if (flags & HEAP_ZERO_MEMORY)
             memset( (char *)(pArena + 1) + oldSize, 0,
                     (pArena->size & ARENA_SIZE_MASK) - oldSize );
         else if (TRACE_ON(heap))
+        {
             memset( (char *)(pArena + 1) + oldSize, ARENA_INUSE_FILLER,
                     (pArena->size & ARENA_SIZE_MASK) - oldSize );
+        }
     }
 
     /* Return the new arena */
Index: include/config.h.in
===================================================================
RCS file: /home/wine/wine/include/config.h.in,v
retrieving revision 1.146
diff -u -r1.146 config.h.in
--- include/config.h.in	28 Mar 2003 00:36:13 -0000	1.146
+++ include/config.h.in	28 Mar 2003 21:42:40 -0000
@@ -626,6 +626,9 @@
 /* Define to 1 if you have the <utime.h> header file. */
 #undef HAVE_UTIME_H
 
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+#undef HAVE_VALGRIND_MEMCHECK_H
+
 /* Define if we have va_copy */
 #undef HAVE_VA_COPY
 
Index: include/wine/server_protocol.h
===================================================================
RCS file: /home/wine/wine/include/wine/server_protocol.h,v
retrieving revision 1.63
diff -u -r1.63 server_protocol.h
--- include/wine/server_protocol.h	26 Mar 2003 23:41:43 -0000	1.63
+++ include/wine/server_protocol.h	28 Mar 2003 21:42:46 -0000
@@ -12,6 +12,8 @@
 #include <time.h>
 #include "winbase.h"
 
+#include "pshpack1.h"
+
 struct request_header
 {
     int          req;
@@ -314,6 +316,7 @@
     thread_id_t  tid;
     int          boot;
     int          version;
+    int          suspend;
 };
 
 
@@ -443,6 +446,7 @@
 {
     struct reply_header __header;
     int          count;
+    int          local_pid;
 };
 
 
@@ -3030,6 +3034,8 @@
     /* VARARG(module,unicode_str); */
 };
 
+#include "poppack.h"
+
 
 enum request
 {
@@ -3572,6 +3578,6 @@
     struct get_next_hook_reply get_next_hook_reply;
 };
 
-#define SERVER_PROTOCOL_VERSION 103
+#define SERVER_PROTOCOL_VERSION 104
 
 #endif /* __WINE_WINE_SERVER_PROTOCOL_H */
Index: scheduler/client.c
===================================================================
RCS file: /home/wine/wine/scheduler/client.c,v
retrieving revision 1.95
diff -u -r1.95 client.c
--- scheduler/client.c	28 Mar 2003 00:36:12 -0000	1.95
+++ scheduler/client.c	28 Mar 2003 21:42:50 -0000
@@ -673,6 +673,7 @@
     TEB *teb = NtCurrentTeb();
     int version, ret;
     int reply_pipe[2];
+    int stop_myself = 0;
 
     /* ignore SIGPIPE so that we get a EPIPE error instead  */
     signal( SIGPIPE, SIG_IGN );
@@ -701,9 +702,10 @@
         req->reply_fd    = reply_pipe[1];
         req->wait_fd     = teb->wait_fd[1];
         ret = wine_server_call( req );
-        teb->pid = reply->pid;
-        teb->tid = reply->tid;
-        version  = reply->version;
+        teb->pid    = reply->pid;
+        teb->tid    = reply->tid;
+        version     = reply->version;
+        stop_myself = reply->suspend;
         if (reply->boot) boot_thread_id = teb->tid;
         else if (boot_thread_id == teb->tid) boot_thread_id = 0;
     }
@@ -717,6 +719,12 @@
                                "Or maybe the wrong wineserver is still running?\n",
                                version, SERVER_PROTOCOL_VERSION,
                                (version > SERVER_PROTOCOL_VERSION) ? "wine" : "wineserver" );
+
+    if (stop_myself)
+    {
+        /* this thread was created 'suspended' */
+        kill( getpid(), SIGUSR1 );
+    }
 }
 
 
Index: scheduler/thread.c
===================================================================
RCS file: /home/wine/wine/scheduler/thread.c,v
retrieving revision 1.133
diff -u -r1.133 thread.c
--- scheduler/thread.c	26 Mar 2003 01:33:48 -0000	1.133
+++ scheduler/thread.c	28 Mar 2003 21:42:51 -0000
@@ -33,6 +33,7 @@
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif
+#include <signal.h>
 #include "wine/winbase16.h"
 #include "thread.h"
 #include "task.h"
@@ -447,6 +448,7 @@
         req->handle   = hthread;
         req->priority = priority;
         req->mask     = SET_THREAD_INFO_PRIORITY;
+        req->affinity = 0;
         ret = !wine_server_call_err( req );
     }
     SERVER_END_REQ;
@@ -501,6 +503,7 @@
         req->handle   = hThread;
         req->affinity = dwThreadAffinityMask;
         req->mask     = SET_THREAD_INFO_AFFINITY;
+        req->priority = 0;
         ret = !wine_server_call_err( req );
         /* FIXME: should return previous value */
     }
@@ -602,12 +605,25 @@
     HANDLE hthread) /* [in] Handle to the thread */
 {
     DWORD ret = 0xffffffff;
+    int suspend_pid = 0;
+
     SERVER_START_REQ( suspend_thread )
     {
         req->handle = hthread;
-        if (!wine_server_call_err( req )) ret = reply->count;
+        if (!wine_server_call_err( req ))
+        {
+            ret = reply->count;
+            suspend_pid = reply->local_pid;
+        }
     }
     SERVER_END_REQ;
+
+    if ( suspend_pid )
+    {
+        /* we need to suspend the thread locally */
+        kill( suspend_pid, SIGUSR1 );
+    }
+
     return ret;
 }
 
Index: server/protocol.def
===================================================================
RCS file: /home/wine/wine/server/protocol.def,v
retrieving revision 1.63
diff -u -r1.63 protocol.def
--- server/protocol.def	26 Mar 2003 23:41:43 -0000	1.63
+++ server/protocol.def	28 Mar 2003 21:42:56 -0000
@@ -28,6 +28,8 @@
 #include <time.h>
 #include "winbase.h"
 
+#include "pshpack1.h"
+
 struct request_header
 {
     int          req;          /* request code */
@@ -289,6 +291,7 @@
     thread_id_t  tid;          /* thread id of the new thread */
     int          boot;         /* is this the boot thread? */
     int          version;      /* protocol version */
+    int          suspend;      /* suspend this new thread */
 @END
 
 
@@ -376,6 +379,7 @@
     obj_handle_t handle;       /* thread handle */
 @REPLY
     int          count;        /* new suspend count */
+    int          local_pid;    /* if greater than 0, then locally suspend this PID */
 @END
 
 
@@ -2110,3 +2114,5 @@
     int            next_unicode;   /* is the next a unicode hook? */
     VARARG(module,unicode_str);    /* module name */
 @END
+
+#include "poppack.h"
Index: server/thread.c
===================================================================
RCS file: /home/wine/wine/server/thread.c,v
retrieving revision 1.95
diff -u -r1.95 thread.c
--- server/thread.c	22 Mar 2003 21:00:09 -0000	1.95
+++ server/thread.c	28 Mar 2003 21:42:58 -0000
@@ -312,12 +312,21 @@
 }
 
 /* suspend a thread */
-static int suspend_thread( struct thread *thread )
+static int suspend_thread( struct thread *thread, int *clientsuspend )
 {
     int old_count = thread->suspend;
     if (thread->suspend < MAXIMUM_SUSPEND_COUNT)
     {
-        if (!(thread->process->suspend + thread->suspend++)) stop_thread( thread );
+        if (*clientsuspend && (thread->process == current->process))
+        {
+           /* thread from the same process, get the client itself to do the suspend */
+           *clientsuspend = !(thread->process->suspend + thread->suspend++);
+        }
+        else
+        {
+           if (!(thread->process->suspend + thread->suspend++)) stop_thread( thread );
+           *clientsuspend = 0;
+        }
     }
     else set_error( STATUS_SUSPEND_COUNT_EXCEEDED );
     return old_count;
@@ -851,7 +860,7 @@
     current->unix_tid = req->unix_tid;
     current->teb      = req->teb;
 
-    if (current->suspend + current->process->suspend > 0) stop_thread( current );
+    reply->suspend = (current->suspend + current->process->suspend > 0);
     if (current->process->running_threads > 1)
         generate_debug_event( current, CREATE_THREAD_DEBUG_EVENT, req->entry );
 
@@ -940,8 +949,11 @@
 
     if ((thread = get_thread_from_handle( req->handle, THREAD_SUSPEND_RESUME )))
     {
+        int client_suspend = 1;
+
         if (thread->state == TERMINATED) set_error( STATUS_ACCESS_DENIED );
-        else reply->count = suspend_thread( thread );
+        else reply->count = suspend_thread( thread, &client_suspend );
+        reply->local_pid = ( client_suspend ) ? thread->unix_pid : 0;
         release_object( thread );
     }
 }
Index: server/trace.c
===================================================================
RCS file: /home/wine/wine/server/trace.c,v
retrieving revision 1.160
diff -u -r1.160 trace.c
--- server/trace.c	26 Mar 2003 23:41:43 -0000	1.160
+++ server/trace.c	28 Mar 2003 21:43:05 -0000
@@ -471,7 +471,8 @@
     fprintf( stderr, " pid=%04x,", req->pid );
     fprintf( stderr, " tid=%04x,", req->tid );
     fprintf( stderr, " boot=%d,", req->boot );
-    fprintf( stderr, " version=%d", req->version );
+    fprintf( stderr, " version=%d,", req->version );
+    fprintf( stderr, " suspend=%d", req->suspend );
 }
 
 static void dump_terminate_process_request( const struct terminate_process_request *req )
@@ -565,7 +566,8 @@
 
 static void dump_suspend_thread_reply( const struct suspend_thread_reply *req )
 {
-    fprintf( stderr, " count=%d", req->count );
+    fprintf( stderr, " count=%d,", req->count );
+    fprintf( stderr, " local_pid=%d", req->local_pid );
 }
 
 static void dump_resume_thread_request( const struct resume_thread_request *req )
Index: tools/winewrapper
===================================================================
RCS file: /home/wine/wine/tools/winewrapper,v
retrieving revision 1.5
diff -u -r1.5 winewrapper
--- tools/winewrapper	22 Mar 2003 20:40:48 -0000	1.5
+++ tools/winewrapper	28 Mar 2003 21:43:05 -0000
@@ -85,6 +85,9 @@
   wine|*/wine)
     exec "$WINELOADER" "$@"
     ;;
+  wine.vg|*/wine.vg)
+    exec "valgrind" "--num-callers=30" "--gdb-attach=yes" "--workaround-gcc296-bugs=yes" "$WINELOADER" "$@"
+    ;;
   */*)
     [ -f "$0.exe.so" ] && exec "$WINELOADER" "$0.exe.so" "$@"
     echo "$0: cannot find corresponding application"
diff -u debug.c debug.c
--- dlls/msvcrt/debug.c 2003-03-24 15:56:22.000000000 +0000
+++ dlls/msvcrt/debug.c 2003-03-20 14:27:00.000000000 +0000
@@ -0,0 +1,77 @@
+/*
+ * msvcrt.dll debugging code
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "msvcrt.h"
+#include "msvcrt/eh.h"
+#include "msvcrt/stdlib.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
+
+/*********************************************************************
+ *             _CrtSetDumpClient (MSVCRTD.@)
+ */
+void *MSVCRT__CrtSetDumpClient()
+{
+    return NULL;
+}
+
+
+/*********************************************************************
+ *             _CrtSetReportHook (MSVCRTD.@)
+ */
+void *MSVCRT__CrtSetReportHook()
+{
+    return NULL;
+}
+
+
+/*********************************************************************
+ *             _CrtSetReportMode (MSVCRTD.@)
+ */
+int MSVCRT__CrtSetReportMode()
+{
+    return 0;
+}
+
+
+/*********************************************************************
+ *             _CrtSetDbgFlag (MSVCRTD.@)
+ */
+int MSVCRT__CrtSetDbgFlag()
+{
+    return 0;
+}
+
+
+/*********************************************************************
+ *             _CrtDbgReport (MSVCRTD.@)
+ */
+int MSVCRT__CrtDbgReport()
+{
+    return 0;
+}
+
+/*********************************************************************
+ *             _CrtDumpMemoryLeaks (MSVCRTD.@)
+ */
+int MSVCRT__CrtDumpMemoryLeaks()
+{
+    return 0;
+}
diff -u msvcrtd.spec msvcrtd.spec
--- dlls/msvcrt/msvcrtd.spec	2003-03-24 15:56:22.000000000 +0000
+++ dlls/msvcrt/msvcrtd.spec	2003-03-20 14:43:10.000000000 +0000
@@ -0,0 +1,795 @@
+# msvcrtd.dll - MS VC++ Run Time Library
+
+@ cdecl $I10_OUTPUT() MSVCRT_I10_OUTPUT
+@ cdecl ??0__non_rtti_object@@QAE@ABV0@@Z(ptr ptr) MSVCRT___non_rtti_object_copy_ctor
+@ cdecl ??0__non_rtti_object@@QAE@PBD@Z(ptr ptr) MSVCRT___non_rtti_object_ctor
+@ cdecl ??0bad_cast@@QAE@ABQBD@Z(ptr ptr) MSVCRT_bad_cast_ctor
+@ cdecl ??0bad_cast@@QAE@ABV0@@Z(ptr ptr) MSVCRT_bad_cast_copy_ctor
+@ cdecl ??0bad_typeid@@QAE@ABV0@@Z(ptr ptr) MSVCRT_bad_typeid_copy_ctor
+@ cdecl ??0bad_typeid@@QAE@PBD@Z(ptr ptr) MSVCRT_bad_typeid_ctor
+@ cdecl ??0exception@@QAE@ABQBD@Z(ptr ptr) MSVCRT_exception_ctor
+@ cdecl ??0exception@@QAE@ABV0@@Z(ptr ptr) MSVCRT_exception_copy_ctor
+@ cdecl ??0exception@@QAE@XZ(ptr) MSVCRT_exception_default_ctor
+@ cdecl ??1__non_rtti_object@@UAE@XZ(ptr) MSVCRT___non_rtti_object_dtor
+@ cdecl ??1bad_cast@@UAE@XZ(ptr) MSVCRT_bad_cast_dtor
+@ cdecl ??1bad_typeid@@UAE@XZ(ptr) MSVCRT_bad_typeid_dtor
+@ cdecl ??1exception@@UAE@XZ(ptr) MSVCRT_exception_dtor
+@ cdecl ??1type_info@@UAE@XZ(ptr) MSVCRT_type_info_dtor
+@ cdecl ??2@YAPAXI@Z(long) MSVCRT_operator_new
+@ cdecl ??2@YAPAXIHPBDH@Z(long) MSVCRT_operator_new
+@ cdecl ??3@YAXPAX@Z(ptr) MSVCRT_operator_delete
+@ cdecl ??4__non_rtti_object@@QAEAAV0@ABV0@@Z(ptr ptr) MSVCRT___non_rtti_object_opequals
+@ cdecl ??4bad_cast@@QAEAAV0@ABV0@@Z(ptr ptr) MSVCRT_bad_cast_opequals
+@ cdecl ??4bad_typeid@@QAEAAV0@ABV0@@Z(ptr ptr)MSVCRT_bad_typeid_opequals
+@ cdecl ??4exception@@QAEAAV0@ABV0@@Z(ptr ptr) MSVCRT_exception_opequals
+@ stdcall ??8type_info@@QBEHABV0@@Z(ptr ptr) MSVCRT_type_info_opequals_equals
+@ stdcall ??9type_info@@QBEHABV0@@Z(ptr ptr) MSVCRT_type_info_opnot_equals
+@ stub ??_7__non_rtti_object@@6B@
+@ stub ??_7bad_cast@@6B@
+@ stub ??_7bad_typeid@@6B@
+@ stub ??_7exception@@6B@
+@ cdecl ??_E__non_rtti_object@@UAEPAXI@Z(ptr long) MSVCRT___non_rtti_object__unknown_E
+@ stub ??_Ebad_cast@@UAEPAXI@Z #(ptr long)
+@ stub ??_Ebad_typeid@@UAEPAXI@Z #(ptr long)
+@ cdecl ??_Eexception@@UAEPAXI@Z(ptr long) MSVCRT_exception__unknown_E
+@ cdecl ??_G__non_rtti_object@@UAEPAXI@Z(ptr long) MSVCRT___non_rtti_object__unknown_G
+@ stub ??_Gbad_cast@@UAEPAXI@Z #(ptr long)
+@ stub ??_Gbad_typeid@@UAEPAXI@Z #(ptr long)
+@ cdecl ??_Gexception@@UAEPAXI@Z(ptr long) MSVCRT_exception__unknown_G
+@ cdecl ?_query_new_handler@@YAP6AHI@ZXZ() MSVCRT__query_new_handler
+@ cdecl ?_query_new_mode@@YAHXZ() MSVCRT__query_new_mode
+@ cdecl ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z(ptr) MSVCRT__set_new_handler
+@ cdecl ?_set_new_mode@@YAHH@Z(long) MSVCRT__set_new_mode
+@ cdecl ?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0@Z@Z(ptr) MSVCRT__set_se_translator
+@ stub ?before@type_info@@QBEHABV1@@Z #(ptr ptr) stdcall
+@ stdcall ?name@type_info@@QBEPBDXZ(ptr) MSVCRT_type_info_name
+@ stdcall ?raw_name@type_info@@QBEPBDXZ(ptr) MSVCRT_type_info_raw_name
+@ cdecl ?set_new_handler@@YAP6AXXZP6AXXZ@Z(ptr) MSVCRT__set_new_handler
+@ cdecl ?set_terminate@@YAP6AXXZP6AXXZ@Z(ptr) MSVCRT_set_terminate
+@ cdecl ?set_unexpected@@YAP6AXXZP6AXXZ@Z(ptr) MSVCRT_set_unexpected
+@ cdecl ?terminate@@YAXXZ() MSVCRT_terminate
+@ cdecl ?unexpected@@YAXXZ() MSVCRT_unexpected
+@ cdecl ?what@exception@@UBEPBDXZ(ptr) MSVCRT_what_exception
+@ cdecl _CIacos()
+@ cdecl _CIasin()
+@ cdecl _CIatan()
+@ cdecl _CIatan2()
+@ cdecl _CIcos()
+@ cdecl _CIcosh()
+@ cdecl _CIexp()
+@ cdecl _CIfmod()
+@ cdecl _CIlog()
+@ cdecl _CIlog10()
+@ cdecl _CIpow()
+@ cdecl _CIsin()
+@ cdecl _CIsinh()
+@ cdecl _CIsqrt()
+@ cdecl _CItan()
+@ cdecl _CItanh()
+@ stub _CrtCheckMemory
+@ stub _CrtDbgBreak
+@ cdecl _CrtDbgReport(long ptr long ptr ptr) MSVCRT__CrtDbgReport
+@ stub _CrtDoForAllClientObjects
+@ cdecl _CrtDumpMemoryLeaks() MSVCRT__CrtDumpMemoryLeaks
+@ stub _CrtIsMemoryBlock
+@ stub _CrtIsValidHeapPointer
+@ stub _CrtIsValidPointer
+@ stub _CrtMemCheckpoint
+@ stub _CrtMemDifference
+@ stub _CrtMemDumpAllObjectsSince
+@ stub _CrtMemDumpStatistics
+@ stub _CrtSetAllocHook
+@ stub _CrtSetBreakAlloc
+@ stub _CrtSetDbgBlockType
+@ cdecl _CrtSetDbgFlag(long) MSVCRT__CrtSetDbgFlag
+@ cdecl _CrtSetDumpClient(ptr) MSVCRT__CrtSetDumpClient
+@ stub _CrtSetReportFile
+@ cdecl _CrtSetReportHook(ptr) MSVCRT__CrtSetReportHook
+@ cdecl _CrtSetReportMode(long) MSVCRT__CrtSetReportMode
+@ cdecl _CxxThrowException(long long)
+@ cdecl -i386 -norelay _EH_prolog()
+@ cdecl _Getdays()
+@ cdecl _Getmonths()
+@ cdecl _Getnames()
+@ extern _HUGE MSVCRT__HUGE
+@ cdecl _Strftime(str long str ptr ptr)
+@ cdecl _XcptFilter(long ptr)
+@ cdecl -register -i386 __CxxFrameHandler(ptr ptr ptr ptr)
+@ stub __CxxLongjmpUnwind #(ptr) stdcall
+@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid
+@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast
+@ cdecl __RTtypeid(ptr) MSVCRT___RTtypeid
+@ stub __STRINGTOLD #(ptr ptr str long)
+@ extern __argc MSVCRT___argc
+@ extern __argv MSVCRT___argv
+@ stub __badioinfo
+@ stub __crtCompareStringA
+@ stub __crtGetLocaleInfoW
+@ cdecl __crtLCMapStringA(long long str long ptr long long long)
+@ cdecl __dllonexit(ptr ptr ptr)
+@ cdecl __doserrno()
+@ stub __fpecode #()
+@ cdecl __getmainargs(ptr ptr ptr long ptr)
+@ extern __initenv MSVCRT___initenv
+@ cdecl __isascii(long) MSVCRT___isascii
+@ cdecl __iscsym(long) MSVCRT___iscsym
+@ cdecl __iscsymf(long) MSVCRT___iscsymf
+@ stub __lc_codepage
+@ stub __lc_collate_cp
+@ stub __lc_handle
+@ cdecl __lconv_init()
+@ extern __mb_cur_max MSVCRT___mb_cur_max
+@ cdecl __p___argc()
+@ cdecl __p___argv()
+@ cdecl __p___initenv()
+@ cdecl __p___mb_cur_max()
+@ cdecl __p___wargv()
+@ cdecl __p___winitenv()
+@ cdecl __p__acmdln()
+@ stub __p__amblksiz #()
+@ cdecl __p__commode()
+@ stub __p__crtAssertBusy #()
+@ stub __p__crtBreakAlloc #()
+@ stub __p__crtDbgFlag  #()
+@ cdecl __p__daylight() MSVCRT___p__daylight
+@ stub __p__dstbias #()
+@ cdecl __p__environ()
+@ stub __p__fileinfo #()
+@ cdecl __p__fmode()
+@ cdecl __p__iob()
+@ stub __p__mbcasemap #()
+@ cdecl __p__mbctype()
+@ cdecl __p__osver()
+@ cdecl __p__pctype()
+@ cdecl __p__pgmptr()
+@ stub __p__pwctype #()
+@ cdecl __p__timezone()
+@ stub __p__tzname #()
+@ cdecl __p__wcmdln()
+@ cdecl __p__wenviron()
+@ cdecl __p__winmajor()
+@ cdecl __p__winminor()
+@ cdecl __p__winver()
+@ stub __p__wpgmptr #()
+@ stub __pioinfo #()
+@ stub __pxcptinfoptrs #()
+@ cdecl __set_app_type(long) MSVCRT___set_app_type
+@ extern __setlc_active MSVCRT___setlc_active
+@ cdecl __setusermatherr(ptr) MSVCRT___setusermatherr
+@ cdecl __threadhandle() kernel32.GetCurrentThread
+@ cdecl __threadid() kernel32.GetCurrentThreadId
+@ cdecl __toascii(long) MSVCRT___toascii
+@ cdecl __unDName(long str ptr ptr long) MSVCRT___unDName
+@ cdecl __unDNameEx() MSVCRT___unDNameEx #FIXME
+@ extern __unguarded_readlc_active MSVCRT___unguarded_readlc_active
+@ extern __wargv MSVCRT___wargv
+@ cdecl __wgetmainargs(ptr ptr ptr long ptr)
+@ extern __winitenv MSVCRT___winitenv
+@ cdecl _abnormal_termination()
+@ cdecl _access(str long)
+@ extern _acmdln MSVCRT__acmdln
+@ cdecl _adj_fdiv_m16i()
+@ cdecl _adj_fdiv_m32()
+@ cdecl _adj_fdiv_m32i()
+@ cdecl _adj_fdiv_m64()
+@ cdecl _adj_fdiv_r()
+@ cdecl _adj_fdivr_m16i()
+@ cdecl _adj_fdivr_m32()
+@ cdecl _adj_fdivr_m32i()
+@ cdecl _adj_fdivr_m64()
+@ cdecl _adj_fpatan()
+@ cdecl _adj_fprem()
+@ cdecl _adj_fprem1()
+@ cdecl _adj_fptan()
+@ cdecl _adjust_fdiv()
+@ stub _aexit_rtn
+@ cdecl _amsg_exit(long) MSVCRT__amsg_exit
+@ cdecl _assert(str str long) MSVCRT__assert
+@ stub _atodbl #(ptr str)
+@ cdecl -ret64 _atoi64(str) ntdll._atoi64
+@ stub _atoldbl #(ptr str)
+@ cdecl _beep(long long)
+@ cdecl _beginthread (ptr long ptr)
+@ cdecl _beginthreadex (ptr long ptr ptr long ptr)
+@ cdecl _c_exit() MSVCRT__c_exit
+@ cdecl _cabs(long)
+@ cdecl _callnewh(long)
+@ cdecl _calloc_dbg(long long) MSVCRT_calloc
+@ cdecl _cexit() MSVCRT__cexit
+@ cdecl _cgets(str)
+@ cdecl _chdir(str)
+@ cdecl _chdrive(long)
+@ cdecl _chgsign( double )
+@ cdecl -i386 _chkesp()
+@ cdecl _chmod(str long)
+@ cdecl _chsize (long long)
+@ cdecl _clearfp()
+@ cdecl _close(long)
+@ cdecl _commit(long)
+@ extern _commode MSVCRT__commode
+@ cdecl _control87(long long)
+@ cdecl _controlfp(long long)
+@ cdecl _copysign( double double )
+@ varargs _cprintf(str)
+@ cdecl _cputs(str)
+@ cdecl _creat(str long)
+@ stub _crtAssertBusy #()
+@ stub _crtBreakAlloc #()
+@ stub _crtDbgFlag #()
+@ varargs _cscanf(str)
+@ extern _ctype MSVCRT__ctype
+@ cdecl _cwait(ptr long long)
+@ extern _daylight MSVCRT___daylight
+@ stub _dstbias
+@ cdecl _dup (long)
+@ cdecl _dup2 (long long)
+@ cdecl _ecvt( double long ptr ptr) ecvt
+@ cdecl _endthread ()
+@ cdecl _endthreadex(long)
+@ extern _environ MSVCRT__environ
+@ cdecl _eof(long)
+@ cdecl _errno() MSVCRT__errno
+@ cdecl _except_handler2(ptr ptr ptr ptr)
+@ cdecl _except_handler3(ptr ptr ptr ptr)
+@ varargs _execl(str str)
+@ stub _execle #(str str) varargs
+@ varargs _execlp(str str)
+@ stub _execlpe #(str str) varargs
+@ cdecl _execv(str str)
+@ cdecl _execve(str str str)
+@ cdecl _execvp(str str)
+@ cdecl _execvpe(str str str)
+@ cdecl _exit(long) MSVCRT__exit
+@ cdecl _expand(ptr long)
+@ cdecl _expand_dbg(ptr long) _expand
+@ cdecl _fcloseall()
+@ cdecl _fcvt( double long ptr ptr) fcvt
+@ cdecl _fdopen(long str)
+@ cdecl _fgetchar()
+@ cdecl _fgetwchar()
+@ cdecl _filbuf(ptr)
+@ stub _fileinfo
+@ cdecl _filelength(long)
+@ stub _filelengthi64 #(long)
+@ cdecl _fileno(ptr)
+@ cdecl _findclose(long)
+@ cdecl _findfirst(str ptr)
+@ stub _findfirsti64 #(str ptr)
+@ cdecl _findnext(long ptr)
+@ stub _findnexti64 #(long ptr)
+@ cdecl _finite( double )
+@ cdecl _flsbuf(long ptr)
+@ cdecl _flushall()
+@ extern _fmode MSVCRT__fmode
+@ cdecl _fpclass(double)
+@ stub _fpieee_flt #(long ptr ptr)
+@ cdecl _fpreset()
+@ cdecl _fputchar(long)
+@ cdecl _free_dbg(ptr) MSVCRT_free
+@ cdecl _fputwchar(long)
+@ cdecl _fsopen(str str long)
+@ cdecl _fstat(long ptr) MSVCRT__fstat
+@ cdecl _fstati64(long ptr)
+@ cdecl _ftime(ptr)
+@ cdecl _ftol() ntdll._ftol
+@ cdecl _fullpath(ptr str long)
+@ cdecl _futime(long ptr)
+@ cdecl _gcvt( double long str) gcvt
+@ cdecl _get_osfhandle(long)
+@ stub _get_sbh_threshold #()
+@ cdecl _getch()
+@ cdecl _getche()
+@ cdecl _getcwd(str long)
+@ cdecl _getdcwd(long str long)
+@ cdecl _getdiskfree(long ptr)
+@ cdecl _getdllprocaddr(long str long)
+@ cdecl _getdrive()
+@ cdecl _getdrives() kernel32.GetLogicalDrives
+@ stub _getmaxstdio #()
+@ cdecl _getmbcp()
+@ cdecl _getpid() kernel32.GetCurrentProcessId
+@ stub _getsystime #(ptr)
+@ cdecl _getw(ptr)
+@ cdecl _getws(ptr) MSVCRT__getws
+@ cdecl _global_unwind2(ptr)
+@ cdecl _heapadd (ptr long)
+@ cdecl _heapchk()
+@ cdecl _heapmin()
+@ cdecl _heapset(long)
+@ stub _heapused #(ptr ptr)
+@ cdecl _heapwalk(ptr)
+@ cdecl _hypot(double double) hypot
+@ cdecl _i64toa(long long ptr long) ntdll._i64toa
+@ cdecl _i64tow(long long ptr long) ntdll._i64tow
+@ cdecl _initterm(ptr ptr)
+@ stub _inp #(long) -i386
+@ stub _inpd #(long) -i386
+@ stub _inpw #(long) -i386
+@ extern _iob MSVCRT__iob
+@ cdecl _isatty(long)
+@ cdecl _isctype(long long)
+@ stub _ismbbalnum #(long)
+@ stub _ismbbalpha #(long)
+@ stub _ismbbgraph #(long)
+@ stub _ismbbkalnum #(long)
+@ cdecl _ismbbkana(long)
+@ stub _ismbbkprint #(long)
+@ stub _ismbbkpunct #(long)
+@ cdecl _ismbblead(long)
+@ stub _ismbbprint #(long)
+@ stub _ismbbpunct #(long)
+@ cdecl _ismbbtrail(long)
+@ cdecl _ismbcalnum(long)
+@ cdecl _ismbcalpha(long)
+@ cdecl _ismbcdigit(long)
+@ cdecl _ismbcgraph(long)
+@ cdecl _ismbchira(long)
+@ cdecl _ismbckata(long)
+@ stub _ismbcl0 #(long)
+@ stub _ismbcl1 #(long)
+@ stub _ismbcl2 #(long)
+@ stub _ismbclegal #(long)
+@ cdecl _ismbclower(long)
+@ cdecl _ismbcprint(long)
+@ cdecl _ismbcpunct(long)
+@ cdecl _ismbcspace(long)
+@ cdecl _ismbcsymbol(long)
+@ cdecl _ismbcupper(long)
+@ cdecl _ismbslead(ptr ptr)
+@ cdecl _ismbstrail(ptr ptr)
+@ cdecl _isnan( double )
+@ cdecl _itoa(long ptr long) ntdll._itoa
+@ cdecl _itow(long ptr long) ntdll._itow
+@ cdecl _j0(double) j0
+@ cdecl _j1(double) j1
+@ cdecl _jn(long double) jn
+@ cdecl _kbhit()
+@ cdecl _lfind(ptr ptr ptr long ptr)
+@ cdecl _loaddll(str)
+@ cdecl _local_unwind2(ptr long)
+@ cdecl _lock(long)
+@ cdecl _locking(long long long)
+@ cdecl _logb( double )
+@ stub _longjmpex
+@ cdecl _lrotl(long long)
+@ cdecl _lrotr(long long)
+@ cdecl _lsearch(ptr ptr long long ptr)
+@ cdecl _lseek(long long long)
+@ cdecl -ret64 _lseeki64(long long long long)
+@ cdecl _ltoa(long ptr long) ntdll._ltoa
+@ cdecl _ltow(long ptr long) ntdll._ltow
+@ cdecl _makepath(str str str str str)
+@ cdecl _malloc_dbg(long) MSVCRT_malloc
+@ cdecl _mbbtombc(long)
+@ stub _mbbtype #(long long)
+@ stub _mbcasemap
+@ cdecl _mbccpy (str str) strcpy
+@ stub _mbcjistojms #(long)
+@ stub _mbcjmstojis #(long)
+@ cdecl _mbclen(ptr)
+@ stub _mbctohira #(long)
+@ stub _mbctokata #(long)
+@ cdecl _mbctolower(long)
+@ stub _mbctombb #(long)
+@ cdecl _mbctoupper(long)
+@ stub _mbctype
+@ stub _mbsbtype #(str long)
+@ cdecl _mbscat(str str) strcat
+@ cdecl _mbschr(str long)
+@ cdecl _mbscmp(str str)
+@ stub _mbscoll #(str str)
+@ cdecl _mbscpy(ptr str) strcpy
+@ cdecl _mbscspn (str str)
+@ cdecl _mbsdec(ptr ptr)
+@ cdecl _mbsdup(str) _strdup
+@ cdecl _mbsicmp(str str)
+@ cdecl _mbsicoll(str str)
+@ cdecl _mbsinc(str)
+@ cdecl _mbslen(str)
+@ cdecl _mbslwr(str)
+@ cdecl _mbsnbcat (str str long)
+@ cdecl _mbsnbcmp(str str long)
+@ cdecl _mbsnbcnt(ptr long)
+@ stub _mbsnbcoll #(str str long)
+@ cdecl _mbsnbcpy(ptr str long)
+@ cdecl _mbsnbicmp(str str long)
+@ stub _mbsnbicoll #(str str long)
+@ cdecl _mbsnbset(str long long)
+@ cdecl _mbsncat(str str long)
+@ cdecl _mbsnccnt(str long)
+@ cdecl _mbsncmp(str str long)
+@ stub _mbsncoll #(str str long)
+@ cdecl _mbsncpy(str str long)
+@ cdecl _mbsnextc(str)
+@ cdecl _mbsnicmp(str str long)
+@ stub _mbsnicoll #(str str long)
+@ cdecl _mbsninc(str long)
+@ cdecl _mbsnset(str long long)
+@ cdecl _mbspbrk(str str)
+@ cdecl _mbsrchr(str long)
+@ cdecl _mbsrev(str)
+@ cdecl _mbsset(str long)
+@ cdecl _mbsspn(str str)
+@ stub _mbsspnp #(str str)
+@ cdecl _mbsstr(str str) strstr
+@ cdecl _mbstok(str str)
+@ cdecl _mbstrlen(str)
+@ cdecl _mbsupr(str)
+@ cdecl _memccpy(ptr ptr long long) memccpy
+@ cdecl _memicmp(str str long) ntdll._memicmp
+@ cdecl _mkdir(str)
+@ cdecl _mktemp(str)
+@ cdecl _msize(ptr)
+@ cdecl _msize_dbg(ptr) _msize
+@ cdecl _nextafter(double double)
+@ cdecl _onexit(ptr)
+@ varargs _open(str long)
+@ cdecl _open_osfhandle(long long)
+@ stub _osver
+@ stub _outp #(long long)
+@ stub _outpd #(long long)
+@ stub _outpw #(long long)
+@ stub _pclose #(ptr)
+@ extern _pctype MSVCRT__pctype
+@ extern _pgmptr MSVCRT__pgmptr
+@ stub _pipe #(ptr long long)
+@ stub _popen #(str str)
+@ cdecl _purecall()
+@ cdecl _putch(long)
+@ cdecl _putenv(str)
+@ cdecl _putw(long ptr)
+@ cdecl _putws(wstr)
+@ stub _pwctype
+@ cdecl _read(long ptr long)
+@ cdecl _realloc_dbg(ptr long) MSVCRT_realloc
+@ cdecl _rmdir(str)
+@ cdecl _rmtmp()
+@ cdecl _rotl(long long)
+@ cdecl _rotr(long long)
+@ cdecl _safe_fdiv()
+@ cdecl _safe_fdivr()
+@ cdecl _safe_fprem()
+@ cdecl _safe_fprem1()
+@ cdecl _scalb( double long)
+@ cdecl _searchenv(str str ptr)
+@ stdcall -i386 _seh_longjmp_unwind(ptr)
+@ stub _set_error_mode #(long)
+@ stub _set_sbh_threshold #(long)
+@ stub _seterrormode #(long)
+@ cdecl -register -i386 _setjmp(ptr) _MSVCRT__setjmp
+@ cdecl -register -i386 _setjmp3(ptr long) _MSVCRT__setjmp3
+@ stub _setmaxstdio #(long)
+@ cdecl _setmbcp(long)
+@ cdecl _setmode(long long)
+@ stub _setsystime #(ptr long)
+@ cdecl _sleep(long)
+@ varargs _snprintf(str long str) snprintf
+@ varargs _snwprintf(wstr long wstr) ntdll._snwprintf
+@ varargs _sopen(str long long) MSVCRT__sopen
+@ varargs _spawnl(long str str)
+@ stub _spawnle #(long str str) varargs
+@ varargs _spawnlp(long str str)
+@ stub _spawnlpe #(long str str) varargs
+@ cdecl _spawnv(long str ptr)
+@ cdecl _spawnve(long str ptr ptr)
+@ cdecl _spawnvp(long str ptr)
+@ cdecl _spawnvpe(long str ptr ptr)
+@ cdecl _splitpath(str ptr ptr ptr ptr) ntdll._splitpath
+@ cdecl _stat(str ptr) MSVCRT__stat
+@ cdecl _stati64(str ptr)
+@ cdecl _statusfp()
+@ cdecl _strcmpi(str str) strcasecmp
+@ cdecl _strdate(ptr)
+@ cdecl _strdup(str)
+@ cdecl _strerror(long)
+@ cdecl _stricmp(str str) strcasecmp
+@ stub _stricoll #(str str)
+@ cdecl _strlwr(str) ntdll._strlwr
+@ stub _strncoll #(str str long)
+@ cdecl _strnicmp(str str long) strncasecmp
+@ stub _strnicoll #(str str long)
+@ cdecl _strnset(str long long)
+@ cdecl _strrev(str)
+@ cdecl _strset(str long)
+@ cdecl _strtime(ptr)
+@ cdecl _strupr(str) ntdll._strupr
+@ cdecl _swab(str str long)
+@ extern _sys_errlist MSVCRT__sys_errlist
+@ extern _sys_nerr MSVCRT__sys_nerr
+@ cdecl _tell(long)
+@ stub _telli64 #(long)
+@ cdecl _tempnam(str str)
+@ stub _timezone # extern
+@ cdecl _tolower(long) MSVCRT__tolower
+@ cdecl _toupper(long) MSVCRT__toupper
+@ stub _tzname # extern
+@ cdecl _tzset() tzset
+@ cdecl _ui64toa(long long ptr long) ntdll._ui64toa
+@ cdecl _ui64tow(long long ptr long) ntdll._ui64tow
+@ cdecl _ultoa(long ptr long) ntdll._ultoa
+@ cdecl _ultow(long ptr long) ntdll._ultow
+@ cdecl _umask(long)
+@ cdecl _ungetch(long)
+@ cdecl _unlink(str)
+@ cdecl _unloaddll(long)
+@ cdecl _unlock(long)
+@ cdecl _utime(str ptr)
+@ cdecl _vsnprintf(ptr long ptr ptr) vsnprintf
+@ cdecl _vsnwprintf(ptr long wstr long)
+@ cdecl _waccess(wstr long)
+@ stub _wasctime #(ptr)
+@ cdecl _wchdir(wstr)
+@ cdecl _wchmod(wstr long)
+@ extern _wcmdln MSVCRT__wcmdln
+@ cdecl _wcreat(wstr long)
+@ cdecl _wcsdup(wstr)
+@ cdecl _wcsicmp(wstr wstr) ntdll._wcsicmp
+@ cdecl _wcsicoll(wstr wstr)
+@ cdecl _wcslwr(wstr) ntdll._wcslwr
+@ stub _wcsncoll #(wstr wstr long)
+@ cdecl _wcsnicmp(wstr wstr long) ntdll._wcsnicmp
+@ stub _wcsnicoll #(wstr wstr long)
+@ cdecl _wcsnset(wstr long long)
+@ cdecl _wcsrev(wstr)
+@ cdecl _wcsset(wstr long)
+@ cdecl _wcsupr(wstr) ntdll._wcsupr
+@ stub _wctime #(ptr)
+@ extern _wenviron MSVCRT__wenviron
+@ stub _wexecl #(wstr wstr) varargs
+@ stub _wexecle #(wstr wstr) varargs
+@ stub _wexeclp #(wstr wstr) varargs
+@ stub _wexeclpe #(wstr wstr) varargs
+@ stub _wexecv #(wstr ptr)
+@ stub _wexecve #(wstr ptr ptr)
+@ stub _wexecvp #(wstr ptr)
+@ stub _wexecvpe #(wstr ptr ptr)
+@ cdecl _wfdopen(long wstr)
+@ cdecl _wfindfirst(wstr ptr)
+@ stub _wfindfirsti64 #(wstr ptr)
+@ cdecl _wfindnext(long ptr)
+@ stub _wfindnexti64 #(long ptr)
+@ cdecl _wfopen(wstr wstr)
+@ stub _wfreopen #(wstr wstr ptr)
+@ cdecl _wfsopen(wstr wstr long)
+@ stub _wfullpath #(ptr wstr long)
+@ cdecl _wgetcwd(wstr long)
+@ cdecl _wgetdcwd(long wstr long)
+@ cdecl _wgetenv(wstr)
+@ extern _winmajor MSVCRT__winmajor
+@ extern _winminor MSVCRT__winminor
+@ extern _winver MSVCRT__winver
+@ cdecl _wmakepath(wstr wstr wstr wstr wstr)
+@ cdecl _wmkdir(wstr)
+@ cdecl _wmktemp(wstr)
+@ varargs _wopen(wstr long)
+@ stub _wperror #(wstr)
+@ stub _wpgmptr # extern
+@ stub _wpopen #(wstr wstr)
+@ cdecl _wputenv(wstr)
+@ cdecl _wremove(wstr)
+@ cdecl _wrename(wstr wstr)
+@ cdecl _write(long ptr long)
+@ cdecl _wrmdir(wstr)
+@ stub _wsearchenv #(wstr wstr ptr)
+@ stub _wsetlocale #(long wstr)
+@ varargs _wsopen (wstr long long) MSVCRT__wsopen
+@ stub _wspawnl #(long wstr wstr) varargs
+@ stub _wspawnle #(long wstr wstr) varargs
+@ stub _wspawnlp #(long wstr wstr) varargs
+@ stub _wspawnlpe #(long wstr wstr) varargs
+@ stub _wspawnv #(long wstr ptr)
+@ stub _wspawnve #(long wstr ptr ptr)
+@ stub _wspawnvp #(long wstr ptr)
+@ stub _wspawnvpe #(long wstr ptr ptr)
+@ cdecl _wsplitpath(wstr wstr wstr wstr wstr)
+@ cdecl _wstat(wstr ptr)
+@ stub _wstati64 #(wstr ptr)
+@ stub _wstrdate #(ptr)
+@ stub _wstrtime #(ptr)
+@ stub _wsystem #(wstr)
+@ cdecl _wtempnam(wstr wstr)
+@ stub _wtmpnam #(ptr)
+@ cdecl _wtoi(wstr) ntdll._wtoi
+@ cdecl _wtoi64(wstr) ntdll._wtoi64
+@ cdecl _wtol(wstr) ntdll._wtol
+@ cdecl _wunlink(wstr)
+@ cdecl _wutime(wstr ptr)
+@ cdecl _y0(double)
+@ cdecl _y1(double)
+@ cdecl _yn(long double )
+@ cdecl abort() MSVCRT_abort
+@ cdecl abs(long)
+@ cdecl acos(double)
+@ cdecl asctime(ptr)
+@ cdecl asin(double)
+@ cdecl atan(double)
+@ cdecl atan2(double double)
+@ cdecl atexit(ptr) MSVCRT_atexit
+@ cdecl atof(str)
+@ cdecl atoi(str)
+@ cdecl atol(str)
+@ cdecl bsearch(ptr ptr long long ptr)
+@ cdecl calloc(long long) MSVCRT_calloc
+@ cdecl ceil(double)
+@ cdecl clearerr(ptr) MSVCRT_clearerr
+@ cdecl clock() MSVCRT_clock
+@ cdecl cos(double)
+@ cdecl cosh(double)
+@ cdecl ctime(ptr)
+@ cdecl difftime(long long) MSVCRT_difftime
+@ cdecl div(long long) MSVCRT_div
+@ cdecl exit(long) MSVCRT_exit
+@ cdecl exp(double)
+@ cdecl fabs(double)
+@ cdecl fclose(ptr) MSVCRT_fclose
+@ cdecl feof(ptr) MSVCRT_feof
+@ cdecl ferror(ptr) MSVCRT_ferror
+@ cdecl fflush(ptr) MSVCRT_fflush
+@ cdecl fgetc(ptr) MSVCRT_fgetc
+@ cdecl fgetpos(ptr ptr) MSVCRT_fgetpos
+@ cdecl fgets(ptr long ptr) MSVCRT_fgets
+@ cdecl fgetwc(ptr) MSVCRT_fgetwc
+@ cdecl fgetws(ptr long ptr) MSVCRT_fgetws
+@ cdecl floor(double)
+@ cdecl fmod(double double)
+@ cdecl fopen(str str) MSVCRT_fopen
+@ varargs fprintf(ptr str) MSVCRT_fprintf
+@ cdecl fputc(long ptr) MSVCRT_fputc
+@ cdecl fputs(str ptr) MSVCRT_fputs
+@ cdecl fputwc(long ptr) MSVCRT_fputwc
+@ cdecl fputws(wstr ptr) MSVCRT_fputws
+@ cdecl fread(ptr long long ptr) MSVCRT_fread
+@ cdecl free(ptr) MSVCRT_free
+@ cdecl freopen(str str ptr) MSVCRT_freopen
+@ cdecl frexp(double ptr)
+@ varargs fscanf(ptr str) MSVCRT_fscanf
+@ cdecl fseek(ptr long long) MSVCRT_fseek
+@ cdecl fsetpos(ptr ptr) MSVCRT_fsetpos
+@ cdecl ftell(ptr) MSVCRT_ftell
+@ varargs fwprintf(ptr wstr) MSVCRT_fwprintf
+@ cdecl fwrite(ptr long long ptr) MSVCRT_fwrite
+@ varargs fwscanf(ptr wstr) MSVCRT_fwscanf
+@ cdecl getc(ptr) MSVCRT_getc
+@ cdecl getchar() MSVCRT_getchar
+@ cdecl getenv(str) MSVCRT_getenv
+@ cdecl gets(str) MSVCRT_gets
+@ cdecl getwc(ptr) MSVCRT_getwc
+@ cdecl getwchar() MSVCRT_getwchar
+@ cdecl gmtime(ptr)
+@ cdecl is_wctype(long long) ntdll.iswctype
+@ cdecl isalnum(long) MSVCRT_isalnum
+@ cdecl isalpha(long) MSVCRT_isalpha
+@ cdecl iscntrl(long) MSVCRT_iscntrl
+@ cdecl isdigit(long) MSVCRT_isdigit
+@ cdecl isgraph(long) MSVCRT_isgraph
+@ cdecl isleadbyte(long) MSVCRT_isleadbyte
+@ cdecl islower(long) MSVCRT_islower
+@ cdecl isprint(long) MSVCRT_isprint
+@ cdecl ispunct(long) MSVCRT_ispunct
+@ cdecl isspace(long) MSVCRT_isspace
+@ cdecl isupper(long) MSVCRT_isupper
+@ cdecl iswalnum(long) MSVCRT_iswalnum
+@ cdecl iswalpha(long) ntdll.iswalpha
+@ cdecl iswascii(long) MSVCRT_iswascii
+@ cdecl iswcntrl(long) MSVCRT_iswcntrl
+@ cdecl iswctype(long long) ntdll.iswctype
+@ cdecl iswdigit(long) MSVCRT_iswdigit
+@ cdecl iswgraph(long) MSVCRT_iswgraph
+@ cdecl iswlower(long) MSVCRT_iswlower
+@ cdecl iswprint(long) MSVCRT_iswprint
+@ cdecl iswpunct(long) MSVCRT_iswpunct
+@ cdecl iswspace(long) MSVCRT_iswspace
+@ cdecl iswupper(long) MSVCRT_iswupper
+@ cdecl iswxdigit(long) MSVCRT_iswxdigit
+@ cdecl isxdigit(long) MSVCRT_isxdigit
+@ cdecl labs(long)
+@ cdecl ldexp( double long) MSVCRT_ldexp
+@ cdecl ldiv(long long) MSVCRT_ldiv
+@ stub localeconv #()
+@ cdecl localtime(ptr)
+@ cdecl log(double)
+@ cdecl log10(double)
+@ cdecl -register -i386 longjmp(ptr long) _MSVCRT_longjmp
+@ cdecl malloc(long) MSVCRT_malloc
+@ cdecl mblen(ptr long) MSVCRT_mblen
+@ cdecl mbstowcs(ptr str long) ntdll.mbstowcs
+@ cdecl mbtowc(wstr str long) MSVCRT_mbtowc
+@ cdecl memchr(ptr long long)
+@ cdecl memcmp(ptr ptr long)
+@ cdecl memcpy(ptr ptr long)
+@ cdecl memmove(ptr ptr long)
+@ cdecl memset(ptr long long)
+@ cdecl mktime(ptr) MSVCRT_mktime
+@ cdecl modf(double ptr)
+@ cdecl perror(str) MSVCRT_perror
+@ cdecl pow(double double)
+@ varargs printf(str) MSVCRT_printf
+@ cdecl putc(long ptr) MSVCRT_putc
+@ cdecl putchar(long) MSVCRT_putchar
+@ cdecl puts(str) MSVCRT_puts
+@ cdecl putwc(long ptr) MSVCRT_fputwc
+@ cdecl putwchar(long) _fputwchar
+@ cdecl qsort(ptr long long ptr)
+@ stub raise #(long)
+@ cdecl rand() MSVCRT_rand
+@ cdecl realloc(ptr long) MSVCRT_realloc
+@ cdecl remove(str) MSVCRT_remove
+@ cdecl rename(str str) MSVCRT_rename
+@ cdecl rewind(ptr) MSVCRT_rewind
+@ varargs scanf(str) MSVCRT_scanf
+@ cdecl setbuf(ptr ptr) MSVCRT_setbuf
+@ cdecl setlocale(long str) MSVCRT_setlocale
+@ cdecl setvbuf(ptr str long long) MSVCRT_setvbuf
+@ cdecl signal(long long) MSVCRT_signal
+@ cdecl sin(double)
+@ cdecl sinh(double)
+@ varargs sprintf(ptr str)
+@ cdecl sqrt(double)
+@ cdecl srand(long)
+@ varargs sscanf(str str) MSVCRT_sscanf
+@ cdecl strcat(str str)
+@ cdecl strchr(str long)
+@ cdecl strcmp(str str)
+@ cdecl strcoll(str str)
+@ cdecl strcpy(ptr str)
+@ cdecl strcspn(str str)
+@ cdecl strerror(long) MSVCRT_strerror
+@ cdecl strftime(str long str ptr)
+@ cdecl strlen(str)
+@ cdecl strncat(str str long)
+@ cdecl strncmp(str str long)
+@ cdecl strncpy(ptr str long)
+@ cdecl strpbrk(str str)
+@ cdecl strrchr(str long)
+@ cdecl strspn(str str)
+@ cdecl strstr(str str)
+@ cdecl strtod(str ptr)
+@ cdecl strtok(str str)
+@ cdecl strtol(str ptr long)
+@ cdecl strtoul(str ptr long)
+@ cdecl strxfrm(ptr str long)
+@ varargs swprintf(wstr wstr) ntdll.swprintf
+@ varargs swscanf(wstr wstr) MSVCRT_swscanf
+@ cdecl system(str) MSVCRT_system
+@ cdecl tan(double)
+@ cdecl tanh(double)
+@ cdecl time(ptr) MSVCRT_time
+@ cdecl tmpfile() MSVCRT_tmpfile
+@ cdecl tmpnam(ptr) MSVCRT_tmpnam
+@ cdecl tolower(long)
+@ cdecl toupper(long)
+@ cdecl towlower(long) ntdll.towlower
+@ cdecl towupper(long) ntdll.towupper
+@ cdecl ungetc(long ptr) MSVCRT_ungetc
+@ cdecl ungetwc(long ptr) MSVCRT_ungetwc
+@ cdecl vfprintf(ptr str long) MSVCRT_vfprintf
+@ cdecl vfwprintf(ptr wstr long) MSVCRT_vfwprintf
+@ cdecl vprintf(str long) MSVCRT_vprintf
+@ cdecl vsprintf(ptr str ptr)
+@ cdecl vswprintf(ptr wstr long) MSVCRT_vswprintf
+@ cdecl vwprintf(wstr long) MSVCRT_vwprintf
+@ cdecl wcscat(wstr wstr) ntdll.wcscat
+@ cdecl wcschr(wstr long) ntdll.wcschr
+@ cdecl wcscmp(wstr wstr) ntdll.wcscmp
+@ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll
+@ cdecl wcscpy(ptr wstr) ntdll.wcscpy
+@ cdecl wcscspn(wstr wstr) ntdll.wcscspn
+@ stub wcsftime #(ptr long wstr ptr)
+@ cdecl wcslen(wstr) ntdll.wcslen
+@ cdecl wcsncat(wstr wstr long) ntdll.wcsncat
+@ cdecl wcsncmp(wstr wstr long) ntdll.wcsncmp
+@ cdecl wcsncpy(ptr wstr long) ntdll.wcsncpy
+@ cdecl wcspbrk(wstr wstr) MSVCRT_wcspbrk
+@ cdecl wcsrchr(wstr long) ntdll.wcsrchr
+@ cdecl wcsspn(wstr wstr) ntdll.wcsspn
+@ cdecl wcsstr(wstr wstr) ntdll.wcsstr
+@ stub wcstod #(wstr ptr)
+@ cdecl wcstok(wstr wstr) ntdll.wcstok
+@ cdecl wcstol(wstr ptr long) ntdll.wcstol
+@ cdecl wcstombs(ptr ptr long) ntdll.wcstombs
+@ cdecl wcstoul(wstr ptr long) ntdll.wcstoul
+@ stub wcsxfrm #(ptr wstr long)
+@ cdecl wctomb(ptr long) MSVCRT_wctomb
+@ varargs wprintf(wstr) MSVCRT_wprintf
+@ varargs wscanf(wstr) MSVCRT_wscanf
+@ stub _Gettnames

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux