char szPerlLibRoot[MAX_PATH+1];
HANDLE PerlDllHandle = INVALID_HANDLE_VALUE;
+#ifdef USE_THREADS
+# ifdef USE_DECLSPEC_THREAD
+__declspec(thread) char strerror_buffer[512];
+__declspec(thread) char getlogin_buffer[128];
+# ifdef HAVE_DES_FCRYPT
+__declspec(thread) char crypt_buffer[30];
+# endif
+# else
+# define strerror_buffer (thr->i.Wstrerror_buffer)
+# define getlogin_buffer (thr->i.Wgetlogin_buffer)
+# define crypt_buffer (thr->i.Wcrypt_buffer)
+# endif
+#else
+char strerror_buffer[512];
+char getlogin_buffer[128];
+# ifdef HAVE_DES_FCRYPT
+char crypt_buffer[30];
+# endif
+#endif
+
static int do_spawn2(char *cmd, int exectype);
int
return (agid == ROOT_GID ? 0 : -1);
}
+char *
+getlogin(void)
+{
+ dTHR;
+ char *buf = getlogin_buffer;
+ DWORD size = sizeof(getlogin_buffer);
+ if (GetUserName(buf,&size))
+ return buf;
+ return (char*)NULL;
+}
+
/*
* pretended kill
*/
return 0;
}
+#ifdef HAVE_DES_FCRYPT
+extern char * des_fcrypt(char *cbuf, const char *txt, const char *salt);
+
+DllExport char *
+win32_crypt(const char *txt, const char *salt)
+{
+ dTHR;
+ return des_fcrypt(crypt_buffer, txt, salt);
+}
+#endif
+
#ifdef USE_FIXED_OSFHANDLE
EXTERN_C int __cdecl _alloc_osfhnd(void);
* we have to roll our own.
*/
-#ifdef USE_THREADS
-#ifdef USE_DECLSPEC_THREAD
-__declspec(thread) char strerror_buffer[512];
-#else
-#define strerror_buffer (thr->i.Wstrerror_buffer)
-#endif
-#else
-char strerror_buffer[512];
-#endif
-
DllExport char *
win32_strerror(int e)
{
XS(w32_LoginName)
{
dXSARGS;
- char name[256];
- DWORD size = sizeof(name);
+ char *name = getlogin_buffer;
+ DWORD size = sizeof(getlogin_buffer);
if (GetUserName(name,&size)) {
/* size includes NULL */
ST(0) = sv_2mortal(newSVpv(name,size-1));