Piotr Caban : msvcr80: Add gets_s implementation.

Alexandre Julliard julliard at winehq.org
Thu Sep 13 03:49:16 CDT 2018


Module: wine
Branch: stable
Commit: a9c3e0dd856d915eb2d3a91c5066b828af9ee213
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a9c3e0dd856d915eb2d3a91c5066b828af9ee213

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Jul 16 19:29:04 2018 +0200

msvcr80: Add gets_s implementation.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45393
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 6b268e77bbe4f4d77748d028ea090b6afc2dd062)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 .../api-ms-win-crt-stdio-l1-1-0.spec               |  2 +-
 dlls/msvcr100/msvcr100.spec                        |  2 +-
 dlls/msvcr110/msvcr110.spec                        |  2 +-
 dlls/msvcr120/msvcr120.spec                        |  2 +-
 dlls/msvcr120_app/msvcr120_app.spec                |  2 +-
 dlls/msvcr80/msvcr80.spec                          |  2 +-
 dlls/msvcr90/msvcr90.spec                          |  2 +-
 dlls/msvcrt/file.c                                 | 62 +++++++++++++++-------
 dlls/ucrtbase/ucrtbase.spec                        |  2 +-
 9 files changed, 50 insertions(+), 28 deletions(-)

diff --git a/dlls/api-ms-win-crt-stdio-l1-1-0/api-ms-win-crt-stdio-l1-1-0.spec b/dlls/api-ms-win-crt-stdio-l1-1-0/api-ms-win-crt-stdio-l1-1-0.spec
index 4921883..853a43f 100644
--- a/dlls/api-ms-win-crt-stdio-l1-1-0/api-ms-win-crt-stdio-l1-1-0.spec
+++ b/dlls/api-ms-win-crt-stdio-l1-1-0/api-ms-win-crt-stdio-l1-1-0.spec
@@ -140,7 +140,7 @@
 @ cdecl getc(ptr) ucrtbase.getc
 @ cdecl getchar() ucrtbase.getchar
 @ cdecl gets(str) ucrtbase.gets
-@ stub gets_s
+@ cdecl gets_s(ptr long) ucrtbase.gets_s
 @ cdecl getwc(ptr) ucrtbase.getwc
 @ cdecl getwchar() ucrtbase.getwchar
 @ cdecl putc(long ptr) ucrtbase.putc
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 72b36de..e707fb7 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1700,7 +1700,7 @@
 @ cdecl getenv(str) MSVCRT_getenv
 @ cdecl getenv_s(ptr ptr long str)
 @ cdecl gets(str) MSVCRT_gets
-@ stub gets_s
+@ cdecl gets_s(ptr long) MSVCRT_gets_s
 @ cdecl getwc(ptr) MSVCRT_getwc
 @ cdecl getwchar() MSVCRT_getwchar
 @ cdecl is_wctype(long long) ntdll.iswctype
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index d183953..fca3683 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -2058,7 +2058,7 @@
 @ cdecl getenv(str) MSVCRT_getenv
 @ cdecl getenv_s(ptr ptr long str)
 @ cdecl gets(str) MSVCRT_gets
-@ stub gets_s
+@ cdecl gets_s(ptr long) MSVCRT_gets_s
 @ cdecl getwc(ptr) MSVCRT_getwc
 @ cdecl getwchar() MSVCRT_getwchar
 @ cdecl is_wctype(long long) ntdll.iswctype
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index 926fe81..529103f 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -2204,7 +2204,7 @@
 @ cdecl getenv(str) MSVCRT_getenv
 @ cdecl getenv_s(ptr ptr long str)
 @ cdecl gets(str) MSVCRT_gets
-@ stub gets_s
+@ cdecl gets_s(ptr long) MSVCRT_gets_s
 @ cdecl getwc(ptr) MSVCRT_getwc
 @ cdecl getwchar() MSVCRT_getwchar
 @ stub ilogb
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index 3a38c84..2dc8a07 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -1868,7 +1868,7 @@
 @ cdecl getc(ptr) msvcr120.getc
 @ cdecl getchar() msvcr120.getchar
 @ cdecl gets(str) msvcr120.gets
-@ stub gets_s
+@ cdecl gets_s(ptr long) msvcr120.gets_s
 @ cdecl getwc(ptr) msvcr120.getwc
 @ cdecl getwchar() msvcr120.getwchar
 @ stub ilogb
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 73832c1..b3bd775 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1382,7 +1382,7 @@
 @ cdecl getenv(str) MSVCRT_getenv
 @ cdecl getenv_s(ptr ptr long str)
 @ cdecl gets(str) MSVCRT_gets
-@ stub gets_s
+@ cdecl gets_s(ptr long) MSVCRT_gets_s
 @ cdecl getwc(ptr) MSVCRT_getwc
 @ cdecl getwchar() MSVCRT_getwchar
 @ cdecl is_wctype(long long) ntdll.iswctype
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index d962479..a12c51e 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1355,7 +1355,7 @@
 @ cdecl getenv(str) MSVCRT_getenv
 @ cdecl getenv_s(ptr ptr long str)
 @ cdecl gets(str) MSVCRT_gets
-@ stub gets_s
+@ cdecl gets_s(ptr long) MSVCRT_gets_s
 @ cdecl getwc(ptr) MSVCRT_getwc
 @ cdecl getwchar() MSVCRT_getwchar
 @ cdecl is_wctype(long long) ntdll.iswctype
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 6b295cf..fd453da 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -4705,31 +4705,53 @@ int CDECL MSVCRT_getc(MSVCRT_FILE* file)
 }
 
 /*********************************************************************
- *		gets (MSVCRT.@)
+ *		gets_s (MSVCR80.@)
  */
-char * CDECL MSVCRT_gets(char *buf)
+char * CDECL MSVCRT_gets_s(char *buf, MSVCRT_size_t len)
 {
-  int    cc;
-  char * buf_start = buf;
+    char *buf_start = buf;
+    int cc;
 
-  MSVCRT__lock_file(MSVCRT_stdin);
-  for(cc = MSVCRT__fgetc_nolock(MSVCRT_stdin); cc != MSVCRT_EOF && cc != '\n';
-          cc = MSVCRT__fgetc_nolock(MSVCRT_stdin))
-  {
-      if(cc != '\r')
-          *buf++ = (char)cc;
-  }
-  MSVCRT__unlock_file(MSVCRT_stdin);
+    if (!MSVCRT_CHECK_PMT(buf != NULL)) return NULL;
+    if (!MSVCRT_CHECK_PMT(len != 0)) return NULL;
 
-  if ((cc == MSVCRT_EOF) && (buf_start == buf))
-  {
-    TRACE(":nothing read\n");
-    return NULL;
-  }
-  *buf = '\0';
+    MSVCRT__lock_file(MSVCRT_stdin);
+    for(cc = MSVCRT__fgetc_nolock(MSVCRT_stdin);
+            len != 0 && cc != MSVCRT_EOF && cc != '\n';
+            cc = MSVCRT__fgetc_nolock(MSVCRT_stdin))
+    {
+        if (cc != '\r')
+        {
+            *buf++ = (char)cc;
+            len--;
+        }
+    }
+    MSVCRT__unlock_file(MSVCRT_stdin);
 
-  TRACE("got '%s'\n", buf_start);
-  return buf_start;
+    if (!len)
+    {
+        *buf_start = 0;
+        MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0);
+        return NULL;
+    }
+
+    if ((cc == MSVCRT_EOF) && (buf_start == buf))
+    {
+        TRACE(":nothing read\n");
+        return NULL;
+    }
+    *buf = '\0';
+
+    TRACE("got '%s'\n", buf_start);
+    return buf_start;
+}
+
+/*********************************************************************
+ *              gets (MSVCRT.@)
+ */
+char * CDECL MSVCRT_gets(char *buf)
+{
+    return MSVCRT_gets_s(buf, -1);
 }
 
 /*********************************************************************
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
index 423bb96..d1498d1 100644
--- a/dlls/ucrtbase/ucrtbase.spec
+++ b/dlls/ucrtbase/ucrtbase.spec
@@ -2337,7 +2337,7 @@
 @ cdecl getenv(str) MSVCRT_getenv
 @ cdecl getenv_s(ptr ptr long str)
 @ cdecl gets(str) MSVCRT_gets
-@ stub gets_s
+@ cdecl gets_s(ptr long) MSVCRT_gets_s
 @ cdecl getwc(ptr) MSVCRT_getwc
 @ cdecl getwchar() MSVCRT_getwchar
 @ cdecl hypot(double double) _hypot




More information about the wine-cvs mailing list