[v2 PATCH] msvcrt: Impement clearerr_s

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Fri Sep 22 04:50:23 CDT 2017


v2: Use helper function for invalid parameter.

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 .../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                                        | 15 +++++++++++++++
 dlls/msvcrt/msvcrt.spec                                   |  2 +-
 dlls/ucrtbase/ucrtbase.spec                               |  2 +-
 include/msvcrt/stdio.h                                    |  1 +
 11 files changed, 25 insertions(+), 9 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 6c46519570..98bb853a22 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
@@ -113,7 +113,7 @@
 @ cdecl _wtmpnam(ptr) ucrtbase._wtmpnam
 @ cdecl _wtmpnam_s(ptr long) ucrtbase._wtmpnam_s
 @ cdecl clearerr(ptr) ucrtbase.clearerr
-@ stub clearerr_s
+@ cdecl clearerr_s(ptr) ucrtbase.clearerr_s
 @ cdecl fclose(ptr) ucrtbase.fclose
 @ cdecl feof(ptr) ucrtbase.feof
 @ cdecl ferror(ptr) ucrtbase.ferror
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 1c95da9981..340a41acff 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1647,7 +1647,7 @@
 @ cdecl ceil(double) MSVCRT_ceil
 @ cdecl -arch=arm,x86_64,arm64 ceilf(float) MSVCRT_ceilf
 @ cdecl clearerr(ptr) MSVCRT_clearerr
-@ stub clearerr_s
+@ cdecl clearerr_s(ptr) MSVCRT_clearerr_s
 @ cdecl clock() MSVCRT_clock
 @ cdecl cos(double) MSVCRT_cos
 @ cdecl -arch=arm,x86_64,arm64 cosf(float) MSVCRT_cosf
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index 86209ac3b6..cc90e0c1b3 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -2004,7 +2004,7 @@
 @ cdecl ceil(double) MSVCRT_ceil
 @ cdecl -arch=arm,x86_64,arm64 ceilf(float) MSVCRT_ceilf
 @ cdecl clearerr(ptr) MSVCRT_clearerr
-@ stub clearerr_s
+@ cdecl clearerr_s(ptr) MSVCRT_clearerr_s
 @ cdecl clock() MSVCRT_clock
 @ cdecl cos(double) MSVCRT_cos
 @ cdecl -arch=arm,x86_64,arm64 cosf(float) MSVCRT_cosf
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index c091bd152d..1e7e452ecc 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -2079,7 +2079,7 @@
 @ stub cimagf
 @ stub cimagl
 @ cdecl clearerr(ptr) MSVCRT_clearerr
-@ stub clearerr_s
+@ cdecl clearerr_s(ptr) MSVCRT_clearerr_s
 @ cdecl clock() MSVCRT_clock
 @ stub clog
 @ stub clog10
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index 01932825b2..fba14636f4 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -1745,7 +1745,7 @@
 @ stub cimagf
 @ stub cimagl
 @ cdecl clearerr(ptr) msvcr120.clearerr
-@ stub clearerr_s
+@ cdecl clearerr_s(ptr) msvcr120.clearerr_s
 @ cdecl clock() msvcr120.clock
 @ stub clog
 @ stub clog10
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index a08748c351..d0e9be0d10 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1329,7 +1329,7 @@
 @ cdecl ceil(double) MSVCRT_ceil
 @ cdecl -arch=arm,x86_64,arm64 ceilf(float) MSVCRT_ceilf
 @ cdecl clearerr(ptr) MSVCRT_clearerr
-@ stub clearerr_s
+@ cdecl clearerr_s(ptr) MSVCRT_clearerr_s
 @ cdecl clock() MSVCRT_clock
 @ cdecl cos(double) MSVCRT_cos
 @ cdecl -arch=arm,x86_64,arm64 cosf(float) MSVCRT_cosf
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 1604d623d8..c3a6d2e74e 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1302,7 +1302,7 @@
 @ cdecl ceil(double) MSVCRT_ceil
 @ cdecl -arch=arm,x86_64,arm64 ceilf(float) MSVCRT_ceilf
 @ cdecl clearerr(ptr) MSVCRT_clearerr
-@ stub clearerr_s
+@ cdecl clearerr_s(ptr) MSVCRT_clearerr_s
 @ cdecl clock() MSVCRT_clock
 @ cdecl cos(double) MSVCRT_cos
 @ cdecl cosh(double) MSVCRT_cosh
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 8af9bc2db4..4f6ac3ce9a 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -1466,6 +1466,21 @@ void CDECL MSVCRT_clearerr(MSVCRT_FILE* file)
   MSVCRT__unlock_file(file);
 }
 
+/*********************************************************************
+ *		clearerr_s (MSVCRT.@)
+ */
+int CDECL MSVCRT_clearerr_s(MSVCRT_FILE* file)
+{
+  TRACE(":file (%p) fd (%d)\n",file,file->_file);
+
+  if (!MSVCRT_CHECK_PMT(file != NULL)) return MSVCRT_EINVAL;
+
+  MSVCRT__lock_file(file);
+  file->_flag &= ~(MSVCRT__IOERR | MSVCRT__IOEOF);
+  MSVCRT__unlock_file(file);
+  return 0;
+}
+
 /*********************************************************************
  *		rewind (MSVCRT.@)
  */
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 4e80308625..e72fd7dbb6 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1264,7 +1264,7 @@
 @ cdecl ceil(double) MSVCRT_ceil
 @ cdecl -arch=arm,x86_64,arm64 ceilf(float) MSVCRT_ceilf
 @ cdecl clearerr(ptr) MSVCRT_clearerr
-# stub clearerr_s(ptr)
+@ cdecl clearerr_s(ptr) MSVCRT_clearerr_s
 @ cdecl clock() MSVCRT_clock
 @ cdecl cos(double) MSVCRT_cos
 @ cdecl cosh(double) MSVCRT_cosh
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
index 9512a22495..26b773c0e4 100644
--- a/dlls/ucrtbase/ucrtbase.spec
+++ b/dlls/ucrtbase/ucrtbase.spec
@@ -2222,7 +2222,7 @@
 @ stub cimagf
 @ stub cimagl
 @ cdecl clearerr(ptr) MSVCRT_clearerr
-@ stub clearerr_s
+@ cdecl clearerr_s(ptr) MSVCRT_clearerr_s
 @ cdecl clock() MSVCRT_clock
 @ stub clog
 @ stub clog10
diff --git a/include/msvcrt/stdio.h b/include/msvcrt/stdio.h
index 0606d07542..31b04274e2 100644
--- a/include/msvcrt/stdio.h
+++ b/include/msvcrt/stdio.h
@@ -143,6 +143,7 @@ int    __cdecl _putc_nolock(int,FILE*);
 int    __cdecl _ungetc_nolock(int,FILE*);
 
 void   __cdecl clearerr(FILE*);
+errno_t __cdecl clearerr_s(FILE*);
 int    __cdecl fclose(FILE*);
 int    __cdecl feof(FILE*);
 int    __cdecl ferror(FILE*);
-- 
2.14.1




More information about the wine-patches mailing list