This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Don't use the PERL_MSVCRT_READFIX when using VC++ 7.x onwards.
[perl5.git] / win32 / perllib.c
index 4aeb741..1e4ba09 100644 (file)
 /* Register any extra external extensions */
 char *staticlinkmodules[] = {
     "DynaLoader",
+    /* other similar records will be included from "perllibst.h" */
+#define STATIC1
+#include "perllibst.h"
     NULL,
 };
 
 EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
+/* other similar records will be included from "perllibst.h" */
+#define STATIC2
+#include "perllibst.h"
 
 static void
 xs_init(pTHX)
@@ -27,10 +33,16 @@ xs_init(pTHX)
     char *file = __FILE__;
     dXSUB_SYS;
     newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
+    /* other similar records will be included from "perllibst.h" */
+#define STATIC3
+#include "perllibst.h"
 }
 
 #ifdef PERL_IMPLICIT_SYS
 
+/* WINCE: include replaced by:
+extern "C" void win32_checkTLS(PerlInterpreter *host_perl);
+*/
 #include "perlhost.h"
 
 void
@@ -39,11 +51,45 @@ win32_checkTLS(PerlInterpreter *host_perl)
     dTHX;
     if (host_perl != my_perl) {
        int *nowhere = NULL;
-        *nowhere = 0; 
+#ifdef UNDER_CE
+       printf(" ... bad in win32_checkTLS\n");
+       printf("  %08X ne %08X\n",host_perl,my_perl);
+#endif
        abort();
     }
 }
 
+#ifdef UNDER_CE
+int GetLogicalDrives() {
+    return 0; /* no logical drives on CE */
+}
+int GetLogicalDriveStrings(int size, char addr[]) {
+    return 0; /* no logical drives on CE */
+}
+/* TBD */
+DWORD GetFullPathNameA(LPCSTR fn, DWORD blen, LPTSTR buf,  LPSTR *pfile) {
+    return 0;
+}
+/* TBD */
+DWORD GetFullPathNameW(CONST WCHAR *fn, DWORD blen, WCHAR * buf,  WCHAR **pfile) {
+    return 0;
+}
+/* TBD */
+DWORD SetCurrentDirectoryA(LPSTR pPath) {
+    return 0;
+}
+/* TBD */
+DWORD SetCurrentDirectoryW(CONST WCHAR *pPath) {
+    return 0;
+}
+int xcesetuid(uid_t id){return 0;}
+int xceseteuid(uid_t id){  return 0;}
+int xcegetuid() {return 0;}
+int xcegeteuid(){ return 0;}
+#endif
+
+/* WINCE??: include "perlhost.h" */
+
 EXTERN_C void
 perl_get_host_info(struct IPerlMemInfo* perlMemInfo,
                   struct IPerlMemInfo* perlMemSharedInfo,
@@ -168,7 +214,7 @@ RunPerl(int argc, char **argv, char **env)
      * Borland's CRT does the right thing to argv[0] already. */
     char szModuleName[MAX_PATH];
 
-    GetModuleFileName(NULL, szModuleName, sizeof(szModuleName));
+    Win_GetModuleFileName(NULL, szModuleName, sizeof(szModuleName));
     (void)win32_longpath(szModuleName);
     argv[0] = szModuleName;
 #endif
@@ -245,7 +291,11 @@ DllMain(HANDLE hModule,            /* DLL module handle */
        setmode( fileno( stderr ), O_BINARY );
        _fmode = O_BINARY;
 #endif
+
+#ifndef UNDER_CE
        DisableThreadLibraryCalls((HMODULE)hModule);
+#endif
+
        w32_perldll_handle = hModule;
        set_w32_module_name();
        break;
@@ -261,7 +311,7 @@ DllMain(HANDLE hModule,             /* DLL module handle */
             PerlIO_cleanup() was done here but fails (B).
          */     
        EndSockets();
-#if defined(USE_5005THREADS) || defined(USE_ITHREADS)
+#if defined(USE_ITHREADS)
        if (PL_curinterp)
            FREE_THREAD_KEY;
 #endif
@@ -281,6 +331,7 @@ DllMain(HANDLE hModule,             /* DLL module handle */
     return TRUE;
 }
 
+
 #if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
 EXTERN_C PerlInterpreter *
 perl_clone_host(PerlInterpreter* proto_perl, UV flags) {