Eric Pouech : msvcrt: Implemented the _(w)getenv_s functions.

Alexandre Julliard julliard at winehq.org
Mon Nov 8 11:46:25 CST 2010


Module: wine
Branch: master
Commit: b0c3dc35a8118bfbe9847d0b5024f9ad380adff1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b0c3dc35a8118bfbe9847d0b5024f9ad380adff1

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Sun Nov  7 19:11:26 2010 +0100

msvcrt: Implemented the _(w)getenv_s functions.

---

 dlls/msvcr100/msvcr100.spec |    4 +-
 dlls/msvcr80/msvcr80.spec   |    4 +-
 dlls/msvcr90/msvcr90.spec   |    2 +-
 dlls/msvcrt/environ.c       |   55 +++++++++++++++++++++++++++++++++++++++++++
 dlls/msvcrt/msvcrt.spec     |    4 +-
 5 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 0356f07..0a608b5 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1356,7 +1356,7 @@
 @ cdecl _wgetdcwd(long wstr long) msvcrt._wgetdcwd
 @ stub _wgetdcwd_nolock
 @ cdecl _wgetenv(wstr) msvcrt._wgetenv
-@ stub _wgetenv_s
+@ cdecl _wgetenv_s(ptr ptr long wstr) msvcrt._wgetenv_s
 @ cdecl _wmakepath(ptr wstr wstr wstr wstr) msvcrt._wmakepath
 @ cdecl _wmakepath_s(ptr long wstr wstr wstr wstr) msvcrt._wmakepath_s
 @ cdecl _wmkdir(wstr) msvcrt._wmkdir
@@ -1483,7 +1483,7 @@
 @ cdecl getc(ptr) msvcrt.getc
 @ cdecl getchar() msvcrt.getchar
 @ cdecl getenv(str) msvcrt.getenv
-@ stub getenv_s
+@ cdecl getenv_s(ptr ptr long str) msvcrt.getenv_s
 @ cdecl gets(str) msvcrt.gets
 @ stub gets_s
 @ cdecl getwc(ptr) msvcrt.getwc
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index a1adb18..d29fad1 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1209,7 +1209,7 @@
 @ cdecl _wgetdcwd(long wstr long) msvcrt._wgetdcwd
 @ stub _wgetdcwd_nolock
 @ cdecl _wgetenv(wstr) msvcrt._wgetenv
-@ stub _wgetenv_s
+@ cdecl _wgetenv_s(ptr ptr long wstr) msvcrt._wgetenv_s
 @ extern _winmajor msvcrt._winmajor
 @ extern _winminor msvcrt._winminor
 @ extern _winver msvcrt._winver
@@ -1339,7 +1339,7 @@
 @ cdecl getc(ptr) msvcrt.getc
 @ cdecl getchar() msvcrt.getchar
 @ cdecl getenv(str) msvcrt.getenv
-@ stub getenv_s
+@ cdecl getenv_s(ptr ptr long str) msvcrt.getenv_s
 @ cdecl gets(str) msvcrt.gets
 @ stub gets_s
 @ cdecl getwc(ptr) msvcrt.getwc
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 8ec604a..cc822da 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1196,7 +1196,7 @@
 @ cdecl _wgetdcwd(long wstr long) msvcrt._wgetdcwd
 @ stub _wgetdcwd_nolock
 @ cdecl _wgetenv(wstr) msvcrt._wgetenv
-@ stub _wgetenv_s
+@ cdecl _wgetenv_s(ptr ptr long wstr) msvcrt._wgetenv_s
 @ cdecl _wmakepath(ptr wstr wstr wstr wstr) msvcrt._wmakepath
 @ cdecl _wmakepath_s(ptr long wstr wstr wstr wstr) msvcrt._wmakepath_s
 @ cdecl _wmkdir(wstr) msvcrt._wmkdir
diff --git a/dlls/msvcrt/environ.c b/dlls/msvcrt/environ.c
index 99efd4b..49e4885 100644
--- a/dlls/msvcrt/environ.c
+++ b/dlls/msvcrt/environ.c
@@ -261,3 +261,58 @@ int _wdupenv_s(MSVCRT_wchar_t **buffer, MSVCRT_size_t *numberOfElements,
     if (numberOfElements) *numberOfElements = sz;
     return 0;
 }
+
+/******************************************************************
+ *		getenv_s (MSVCRT.@)
+ */
+int getenv_s(MSVCRT_size_t *pReturnValue, char* buffer, MSVCRT_size_t numberOfElements, const char *varname)
+{
+    char*       e;
+
+    if (!MSVCRT_CHECK_PMT(pReturnValue != NULL) ||
+        !MSVCRT_CHECK_PMT(!(buffer == NULL && numberOfElements > 0)) ||
+        !MSVCRT_CHECK_PMT(varname != NULL))
+    {
+        return *MSVCRT__errno() = MSVCRT_EINVAL;
+    }
+    if (!(e = MSVCRT_getenv(varname)))
+    {
+        *pReturnValue = 0;
+        return *MSVCRT__errno() = MSVCRT_EINVAL;
+    }
+    *pReturnValue = strlen(e) + 1;
+    if (numberOfElements < *pReturnValue)
+    {
+        return *MSVCRT__errno() = MSVCRT_ERANGE;
+    }
+    strcpy(buffer, e);
+    return 0;
+}
+
+/******************************************************************
+ *		_wgetenv_s (MSVCRT.@)
+ */
+int _wgetenv_s(MSVCRT_size_t *pReturnValue, MSVCRT_wchar_t *buffer, MSVCRT_size_t numberOfElements,
+               const MSVCRT_wchar_t *varname)
+{
+    MSVCRT_wchar_t*     e;
+
+    if (!MSVCRT_CHECK_PMT(pReturnValue != NULL) ||
+        !MSVCRT_CHECK_PMT(!(buffer == NULL && numberOfElements > 0)) ||
+        !MSVCRT_CHECK_PMT(varname != NULL))
+    {
+        return *MSVCRT__errno() = MSVCRT_EINVAL;
+    }
+    if (!(e = _wgetenv(varname)))
+    {
+        *pReturnValue = 0;
+        return *MSVCRT__errno() = MSVCRT_EINVAL;
+    }
+    *pReturnValue = strlenW(e) + 1;
+    if (numberOfElements < *pReturnValue)
+    {
+        return *MSVCRT__errno() = MSVCRT_ERANGE;
+    }
+    strcpyW(buffer, e);
+    return 0;
+}
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 871023b..42c2469 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1128,7 +1128,7 @@
 @ cdecl _wgetcwd(wstr long)
 @ cdecl _wgetdcwd(long wstr long)
 @ cdecl _wgetenv(wstr)
-# stub _wgetenv_s
+@ cdecl _wgetenv_s(ptr ptr long wstr)
 @ extern _winmajor MSVCRT__winmajor
 @ extern _winminor MSVCRT__winminor
 # stub _winput_s
@@ -1273,7 +1273,7 @@
 @ cdecl getc(ptr) MSVCRT_getc
 @ cdecl getchar() MSVCRT_getchar
 @ cdecl getenv(str) MSVCRT_getenv
-# stub getenv_s
+@ cdecl getenv_s(ptr ptr long str)
 @ cdecl gets(str) MSVCRT_gets
 @ cdecl getwc(ptr) MSVCRT_getwc
 @ cdecl getwchar() MSVCRT_getwchar




More information about the wine-cvs mailing list