[PATCH 06/14] [Msvcrt*]: implemented the _(w)getenv_s functions
Eric Pouech
eric.pouech at orange.fr
Tue Nov 2 16:03:11 CDT 2010
A+
---
dlls/msvcr100/msvcr100.spec | 4 ++--
dlls/msvcr80/msvcr80.spec | 4 ++--
dlls/msvcr90/msvcr90.spec | 2 +-
dlls/msvcrt/environ.c | 47 +++++++++++++++++++++++++++++++++++++++++++
dlls/msvcrt/msvcrt.spec | 4 ++--
5 files changed, 54 insertions(+), 7 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 4fb2252..31d94b6 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 a3cae87..1a26865 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 4119914..98fea07 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 126209f..171fa01 100644
--- a/dlls/msvcrt/environ.c
+++ b/dlls/msvcrt/environ.c
@@ -262,3 +262,50 @@ int _wdupenv_s(MSVCRT_wchar_t **buffer, MSVCRT_size_t *numberOfElements,
return 0;
}
+/******************************************************************
+ * getenv_s (MSVCRT.@)
+ */
+int getenv_s(size_t *pReturnValue, char* buffer, 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) ||
+ !(e = MSVCRT_getenv(varname)))
+ {
+ 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(size_t *pReturnValue, MSVCRT_wchar_t *buffer, 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) ||
+ !(e = _wgetenv(varname)))
+ {
+ 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 0e95529..99366d8 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1122,7 +1122,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
@@ -1267,7 +1267,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-patches
mailing list