Piotr Caban : msvcr80: Add gets_s implementation.
Alexandre Julliard
julliard at winehq.org
Mon Jul 16 14:40:01 CDT 2018
Module: wine
Branch: master
Commit: 6b268e77bbe4f4d77748d028ea090b6afc2dd062
URL: https://source.winehq.org/git/wine.git/?a=commit;h=6b268e77bbe4f4d77748d028ea090b6afc2dd062
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>
---
.../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 4426987..88698ca 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 3572664..3d116c4 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 b7d644a..f317d1f 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 2d096fc..0f5d143 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 0df1f0a..b563427 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 7238163..a735005 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 1c7b5a4..2c05f25 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -4719,31 +4719,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 6304663..1ced9ca 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