]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
More refactoring and cleanup work on the Win32 string conversion and utility routines.
authormistachkin <mistachkin@noemail.net>
Mon, 4 Apr 2016 02:05:46 +0000 (02:05 +0000)
committermistachkin <mistachkin@noemail.net>
Mon, 4 Apr 2016 02:05:46 +0000 (02:05 +0000)
FossilOrigin-Name: 02ccb444a3d0b9a52ffd04cae9d9b6f654128c35

manifest
manifest.uuid
src/os_win.c

index 0687355cf6e5127e020604a7ae8e6a9a84b28f79..1ff9f109e9cb9fec71240790b0b3db2fa5a3371e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Revise\sand\senhance\sthe\sWin32\sstring\sconversion\sroutines.
-D 2016-04-03T22:44:16.657
+C More\srefactoring\sand\scleanup\swork\son\sthe\sWin32\sstring\sconversion\sand\sutility\sroutines.
+D 2016-04-04T02:05:46.170
 F Makefile.in e812bb732d7af01baa09f1278bd4f4a2e3a09449
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc fe57d7e3e74fa383fd01ced796c0ffd966fc094a
@@ -358,7 +358,7 @@ F src/os.h 91ff889115ecd01f436d3611f7f5ea4dc12d92f1
 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
 F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
 F src/os_unix.c b1ccb273771f41dbdbe0ba7c1ad63c38ad5972ec
-F src/os_win.c 01ae58949a28edaecd5645abbe29ac9d2ee983fd
+F src/os_win.c b3ba9573d8d893e70a6a8015bbee572ecf7ffbef
 F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
 F src/pager.c 38718a019ca762ba4f6795425d5a54db70d1790d
 F src/pager.h e1d38a2f14849e219df0f91f8323504d134c8a56
@@ -1480,7 +1480,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P f76c3a0ca40989fe9401c3b6f662f8e6ef2a730c
-R 9a8e623b20453c0fbff989d22019add7
+P 345860c92195544aad44ea9b0d14c9ebbd50adf2
+R 8daf8efac2ee8825007360be7ce04871
 U mistachkin
-Z 149573e0b667520348654eca6c5f3228
+Z a69ce6a98d15b1e2f1ce825b8343a90e
index 280e3ae958a7aa8701367a4936d5fcdcc9522d42..d7da1c1daf6a3f12f7176e25a132b7a535be9486 100644 (file)
@@ -1 +1 @@
-345860c92195544aad44ea9b0d14c9ebbd50adf2
\ No newline at end of file
+02ccb444a3d0b9a52ffd04cae9d9b6f654128c35
\ No newline at end of file
index 9508c97a144d99c89dffc833a5eb28626c4ea6ed..4aca70b6c926b47242df658d2259988a1ab90e9b 100644 (file)
@@ -1306,6 +1306,12 @@ void sqlite3_win32_write_debug(const char *zBuf, int nBuf){
   int nMin = MIN(nBuf, (SQLITE_WIN32_DBG_BUF_SIZE - 1)); /* may be negative. */
   if( nMin<-1 ) nMin = -1; /* all negative values become -1. */
   assert( nMin==-1 || nMin==0 || nMin<SQLITE_WIN32_DBG_BUF_SIZE );
+#ifdef SQLITE_ENABLE_API_ARMOR
+  if( !zBuf ){
+    (void)SQLITE_MISUSE_BKPT;
+    return;
+  }
+#endif
 #if defined(SQLITE_WIN32_HAS_ANSI)
   if( nMin>0 ){
     memset(zDbgBuf, 0, SQLITE_WIN32_DBG_BUF_SIZE);
@@ -1631,9 +1637,9 @@ void sqlite3MemSetDefault(void){
 #endif /* SQLITE_WIN32_MALLOC */
 
 /*
-** Convert a UTF-8 string to Microsoft Unicode (UTF-16?).
+** Convert a UTF-8 string to Microsoft Unicode.
 **
-** Space to hold the returned string is obtained from malloc.
+** Space to hold the returned string is obtained from sqlite3_malloc().
 */
 static LPWSTR winUtf8ToUnicode(const char *zText){
   int nChar;
@@ -1657,8 +1663,9 @@ static LPWSTR winUtf8ToUnicode(const char *zText){
 }
 
 /*
-** Convert Microsoft Unicode to UTF-8.  Space to hold the returned string is
-** obtained from sqlite3_malloc().
+** Convert a Microsoft Unicode string to UTF-8.
+**
+** Space to hold the returned string is obtained from sqlite3_malloc().
 */
 static char *winUnicodeToUtf8(LPCWSTR zWideText){
   int nByte;
@@ -1682,15 +1689,14 @@ static char *winUnicodeToUtf8(LPCWSTR zWideText){
 }
 
 /*
-** Convert an ANSI string to Microsoft Unicode, based on the
-** current codepage settings for file apis.
+** Convert an ANSI string to Microsoft Unicode, using the ANSI or OEM
+** code page.
 **
-** Space to hold the returned string is obtained
-** from sqlite3_malloc.
+** Space to hold the returned string is obtained from sqlite3_malloc().
 */
 static LPWSTR winMbcsToUnicode(const char *zText, int useAnsi){
   int nByte;
-  LPWSTR zMbcsFilename;
+  LPWSTR zMbcsText;
   int codepage = useAnsi ? CP_ACP : CP_OEMCP;
 
   nByte = osMultiByteToWideChar(codepage, 0, zText, -1, NULL,
@@ -1698,25 +1704,24 @@ static LPWSTR winMbcsToUnicode(const char *zText, int useAnsi){
   if( nByte==0 ){
     return 0;
   }
-  zMbcsFilename = sqlite3MallocZero( nByte*sizeof(zMbcsFilename[0]) );
-  if( zMbcsFilename==0 ){
+  zMbcsText = sqlite3MallocZero( nByte*sizeof(WCHAR) );
+  if( zMbcsText==0 ){
     return 0;
   }
-  nByte = osMultiByteToWideChar(codepage, 0, zText, -1, zMbcsFilename,
+  nByte = osMultiByteToWideChar(codepage, 0, zText, -1, zMbcsText,
                                 nByte);
   if( nByte==0 ){
-    sqlite3_free(zMbcsFilename);
-    zMbcsFilename = 0;
+    sqlite3_free(zMbcsText);
+    zMbcsText = 0;
   }
-  return zMbcsFilename;
+  return zMbcsText;
 }
 
 /*
-** Convert Microsoft Unicode to multi-byte character string, based on the
-** user's ANSI codepage.
+** Convert a Microsoft Unicode string to a multi-byte character string,
+** using the ANSI or OEM code page.
 **
-** Space to hold the returned string is obtained from
-** sqlite3_malloc().
+** Space to hold the returned string is obtained from sqlite3_malloc().
 */
 static char *winUnicodeToMbcs(LPCWSTR zWideText, int useAnsi){
   int nByte;
@@ -1741,14 +1746,15 @@ static char *winUnicodeToMbcs(LPCWSTR zWideText, int useAnsi){
 }
 
 /*
-** Convert multibyte character string to UTF-8.  Space to hold the
-** returned string is obtained from sqlite3_malloc().
+** Convert a multi-byte character string to UTF-8.
+**
+** Space to hold the returned string is obtained from sqlite3_malloc().
 */
-char *sqlite3_win32_mbcs_to_utf8(const char *zText){
+static char *winMbcsToUtf8(const char *zText, int useAnsi){
   char *zTextUtf8;
   LPWSTR zTmpWide;
 
-  zTmpWide = winMbcsToUnicode(zText, osAreFileApisANSI());
+  zTmpWide = winMbcsToUnicode(zText, useAnsi);
   if( zTmpWide==0 ){
     return 0;
   }
@@ -1758,88 +1764,117 @@ char *sqlite3_win32_mbcs_to_utf8(const char *zText){
 }
 
 /*
-** Convert multibyte character string to UTF-8 using the ANSI codepage.
+** Convert a UTF-8 string to a multi-byte character string.
+**
 ** Space to hold the returned string is obtained from sqlite3_malloc().
 */
-char *sqlite3_win32_mbcs_to_utf8_via_ansi(const char *zText){
-  char *zTextUtf8;
+static char *winUtf8ToMbcs(const char *zText, int useAnsi){
+  char *zTextMbcs;
   LPWSTR zTmpWide;
 
-  zTmpWide = winMbcsToUnicode(zText, 1);
+  zTmpWide = winUtf8ToUnicode(zText);
   if( zTmpWide==0 ){
     return 0;
   }
-  zTextUtf8 = winUnicodeToUtf8(zTmpWide);
+  zTextMbcs = winUnicodeToMbcs(zTmpWide, useAnsi);
   sqlite3_free(zTmpWide);
-  return zTextUtf8;
+  return zTextMbcs;
 }
 
 /*
-** Convert multibyte character string to UTF-8 using the OEM codepage.
-** Space to hold the returned string is obtained from sqlite3_malloc().
+** This is a public wrapper for the winUtf8ToUnicode() function.
 */
-char *sqlite3_win32_mbcs_to_utf8_via_oem(const char *zText){
-  char *zTextUtf8;
-  LPWSTR zTmpWide;
-
-  zTmpWide = winMbcsToUnicode(zText, 0);
-  if( zTmpWide==0 ){
+LPWSTR sqlite3_win32_utf8_to_unicode(const char *zText){
+#ifdef SQLITE_ENABLE_API_ARMOR
+  if( !zText ){
+    (void)SQLITE_MISUSE_BKPT;
     return 0;
   }
-  zTextUtf8 = winUnicodeToUtf8(zTmpWide);
-  sqlite3_free(zTmpWide);
-  return zTextUtf8;
+#endif
+#ifndef SQLITE_OMIT_AUTOINIT
+  if( sqlite3_initialize() ) return 0;
+#endif
+  return winUtf8ToUnicode(zText);
 }
 
 /*
-** Convert UTF-8 to multibyte character string.  Space to hold the
-** returned string is obtained from sqlite3_malloc().
+** This is a public wrapper for the winUnicodeToUtf8() function.
 */
-char *sqlite3_win32_utf8_to_mbcs(const char *zText){
-  char *zTextMbcs;
-  LPWSTR zTmpWide;
-
-  zTmpWide = winUtf8ToUnicode(zText);
-  if( zTmpWide==0 ){
+char *sqlite3_win32_unicode_to_utf8(LPCWSTR zWideText){
+#ifdef SQLITE_ENABLE_API_ARMOR
+  if( !zWideText ){
+    (void)SQLITE_MISUSE_BKPT;
     return 0;
   }
-  zTextMbcs = winUnicodeToMbcs(zTmpWide, osAreFileApisANSI());
-  sqlite3_free(zTmpWide);
-  return zTextMbcs;
+#endif
+#ifndef SQLITE_OMIT_AUTOINIT
+  if( sqlite3_initialize() ) return 0;
+#endif
+  return winUnicodeToUtf8(zWideText);
 }
 
 /*
-** Convert UTF-8 to multibyte character string using the ANSI codepage.
-** Space to hold the returned string is obtained from sqlite3_malloc().
+** This is a public wrapper for the winMbcsToUtf8() function.
 */
-char *sqlite3_win32_utf8_to_mbcs_via_ansi(const char *zText){
-  char *zTextMbcs;
-  LPWSTR zTmpWide;
+char *sqlite3_win32_mbcs_to_utf8(const char *zText){
+#ifdef SQLITE_ENABLE_API_ARMOR
+  if( !zText ){
+    (void)SQLITE_MISUSE_BKPT;
+    return 0;
+  }
+#endif
+#ifndef SQLITE_OMIT_AUTOINIT
+  if( sqlite3_initialize() ) return 0;
+#endif
+  return winMbcsToUtf8(zText, osAreFileApisANSI());
+}
 
-  zTmpWide = winUtf8ToUnicode(zText);
-  if( zTmpWide==0 ){
+/*
+** This is a public wrapper for the winMbcsToUtf8() function.
+*/
+char *sqlite3_win32_mbcs_to_utf8_v2(const char *zText, int useAnsi){
+#ifdef SQLITE_ENABLE_API_ARMOR
+  if( !zText ){
+    (void)SQLITE_MISUSE_BKPT;
     return 0;
   }
-  zTextMbcs = winUnicodeToMbcs(zTmpWide, 1);
-  sqlite3_free(zTmpWide);
-  return zTextMbcs;
+#endif
+#ifndef SQLITE_OMIT_AUTOINIT
+  if( sqlite3_initialize() ) return 0;
+#endif
+  return winMbcsToUtf8(zText, useAnsi);
 }
 
 /*
-** Convert UTF-8 to multibyte character string using the OEM codepage.
-** Space to hold the returned string is obtained from sqlite3_malloc().
+** This is a public wrapper for the winUtf8ToMbcs() function.
 */
-char *sqlite3_win32_utf8_to_mbcs_via_oem(const char *zText){
-  char *zTextMbcs;
-  LPWSTR zTmpWide;
+char *sqlite3_win32_utf8_to_mbcs(const char *zText){
+#ifdef SQLITE_ENABLE_API_ARMOR
+  if( !zText ){
+    (void)SQLITE_MISUSE_BKPT;
+    return 0;
+  }
+#endif
+#ifndef SQLITE_OMIT_AUTOINIT
+  if( sqlite3_initialize() ) return 0;
+#endif
+  return winUtf8ToMbcs(zText, osAreFileApisANSI());
+}
 
-  zTmpWide = winUtf8ToUnicode(zText);
-  if( zTmpWide==0 ){
+/*
+** This is a public wrapper for the winUtf8ToMbcs() function.
+*/
+char *sqlite3_win32_utf8_to_mbcs_v2(const char *zText, int useAnsi){
+#ifdef SQLITE_ENABLE_API_ARMOR
+  if( !zText ){
+    (void)SQLITE_MISUSE_BKPT;
     return 0;
   }
-  zTextMbcs = winUnicodeToMbcs(zTmpWide, 0);
-  sqlite3_free(zTmpWide);
-  return zTextMbcs;
+#endif
+#ifndef SQLITE_OMIT_AUTOINIT
+  if( sqlite3_initialize() ) return 0;
+#endif
+  return winUtf8ToMbcs(zText, useAnsi);
 }
 
 /*
@@ -1941,7 +1976,7 @@ static int winGetLastErrorMsg(DWORD lastErrno, int nBuf, char *zBuf){
     if( dwLen > 0 ){
       /* allocate a buffer and convert to UTF8 */
       sqlite3BeginBenignMalloc();
-      zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
+      zOut = winMbcsToUtf8(zTemp, osAreFileApisANSI());
       sqlite3EndBenignMalloc();
       /* free the system buffer allocated by FormatMessage */
       osLocalFree(zTemp);
@@ -4386,7 +4421,7 @@ static char *winConvertToUtf8Filename(const void *zFilename){
   }
 #ifdef SQLITE_WIN32_HAS_ANSI
   else{
-    zConverted = sqlite3_win32_mbcs_to_utf8(zFilename);
+    zConverted = winMbcsToUtf8(zFilename, osAreFileApisANSI());
   }
 #endif
   /* caller will handle out of memory */
@@ -4407,7 +4442,7 @@ static void *winConvertFromUtf8Filename(const char *zFilename){
   }
 #ifdef SQLITE_WIN32_HAS_ANSI
   else{
-    zConverted = sqlite3_win32_utf8_to_mbcs(zFilename);
+    zConverted = winUtf8ToMbcs(zFilename, osAreFileApisANSI());
   }
 #endif
   /* caller will handle out of memory */
@@ -4608,7 +4643,7 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){
       return winLogError(SQLITE_IOERR_GETTEMPPATH, osGetLastError(),
                          "winGetTempname3", 0);
     }
-    zUtf8 = sqlite3_win32_mbcs_to_utf8(zMbcsPath);
+    zUtf8 = winMbcsToUtf8(zMbcsPath, osAreFileApisANSI());
     if( zUtf8 ){
       sqlite3_snprintf(nMax, zBuf, "%s", zUtf8);
       sqlite3_free(zUtf8);
@@ -5386,7 +5421,7 @@ static int winFullPathname(
                          "winFullPathname4", zRelative);
     }
     sqlite3_free(zConverted);
-    zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
+    zOut = winMbcsToUtf8(zTemp, osAreFileApisANSI());
     sqlite3_free(zTemp);
   }
 #endif