[PATCH 3/9] include: Add StringCchCopyNA() to strsafe.h.

Zebediah Figura zfigura at codeweavers.com
Mon Nov 29 11:01:16 CST 2021


We will need this to bundle winpthreads.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 include/strsafe.h | 35 +++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/include/strsafe.h b/include/strsafe.h
index 842075f0fce..7fdb904ed8b 100644
--- a/include/strsafe.h
+++ b/include/strsafe.h
@@ -25,8 +25,39 @@
 /* Windows version includes this header. */
 /* #include <specstring.h> */
 
+#define STRSAFEAPI static inline HRESULT
+
+#define STRSAFE_MAX_CCH 2147483647
+
 #define STRSAFE_E_INSUFFICIENT_BUFFER   ((HRESULT)0x8007007A)
-#define STRSAFE_E_INVALID_PARAM         ((HRESULT)0x80070075)
+#define STRSAFE_E_INVALID_PARAMETER     ((HRESULT)0x80070057)
 #define STRSAFE_E_END_OF_FILE           ((HRESULT)0x80070026)
 
-#endif
+typedef char *STRSAFE_LPSTR;
+typedef const char *STRSAFE_LPCSTR;
+
+STRSAFEAPI StringCopyNWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchSrc) {
+  HRESULT hr = S_OK;
+  if(cchDest==0) hr = STRSAFE_E_INVALID_PARAMETER;
+  else {
+    while(cchDest && cchSrc && (*pszSrc!='\0')) {
+      *pszDest++ = *pszSrc++;
+      cchDest--;
+      cchSrc--;
+    }
+    if(cchDest==0) {
+      pszDest--;
+      hr = STRSAFE_E_INSUFFICIENT_BUFFER;
+    }
+    *pszDest= '\0';
+  }
+  return hr;
+}
+
+STRSAFEAPI StringCchCopyNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy) {
+  if(cchDest > STRSAFE_MAX_CCH || cchToCopy > STRSAFE_MAX_CCH)
+    return STRSAFE_E_INVALID_PARAMETER;
+  return StringCopyNWorkerA(pszDest,cchDest,pszSrc,cchToCopy);
+}
+
+#endif /* __WINE_STRSAFE_H */
-- 
2.34.0




More information about the wine-devel mailing list