- Timestamp:
- Jun 8, 2009, 11:33:03 PM (16 years ago)
- File:
-
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/corelib/io/qsettings_os2.cpp
r22 r23 3 3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** Contact: Qt Software Information (qt-info@nokia.com) 5 ** 6 ** Copyright (C) 2009 netlabs.org. OS/2 parts. 5 7 ** 6 8 ** This file is part of the QtCore module of the Qt Toolkit. … … 47 49 #include "qvector.h" 48 50 #include "qmap.h" 49 #include "qt_windows.h"50 51 #include "qdebug.h" 52 53 /******************************************************************************* 54 ** Define some Win32 stuff to use Open32 Reg* functions from REGISTRY.DLL 55 */ 56 57 extern "C" { 58 59 /* No UNICODE support on OS/2 */ 60 #define QT_WA( uni, ansi ) ansi 61 62 typedef wchar_t WCHAR; 63 typedef WCHAR TCHAR; 64 65 /* These definitions come from os2wdef.h in the OS/2 Toolkit */ 66 67 #define APIENTRY _System 68 69 typedef char CHAR , *PCHAR , *LPCHAR; 70 typedef int INT, *PINT, *LPINT; 71 typedef long LONG, *PLONG, *LPLONG; 72 typedef unsigned char UCHAR , *PUCHAR, *LPUCHAR; 73 typedef unsigned long ULONG , *PULONG , *LPULONG; 74 typedef void VOID, *PVOID, *LPVOID; 75 76 typedef UCHAR BYTE, *PBYTE, *LPBYTE; 77 typedef ULONG DWORD, *PDWORD, *LPDWORD; 78 79 typedef INT BOOL, *PBOOL, *LPBOOL; 80 81 typedef WCHAR *LPWSTR, *PWSTR; 82 typedef const WCHAR *LPCWSTR, *PCWSTR; 83 84 typedef CHAR *LPSTR, *PSTR; 85 typedef const CHAR *LPCSTR, *PCSTR; 86 87 #define CONST const 88 89 /* These definitions come from os2win.h in the OS/2 Toolkit */ 90 91 typedef DWORD ACCESS_MASK; 92 typedef ACCESS_MASK REGSAM; 93 94 typedef DWORD HKEY, *PHKEY; 95 96 typedef struct _tagSECURITY_ATTRIBUTES { 97 DWORD nLength; 98 LPVOID lpSecurityDescriptor; 99 BOOL bInheritHandle; 100 } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; 101 102 typedef struct _tagFILETIME { 103 DWORD dwLowDateTime; 104 DWORD dwHighDateTime; 105 } FILETIME, *PFILETIME, *LPFILETIME; 106 107 #define HKEY_LOCAL_MACHINE 0xFFFFFFEFL 108 #define HKEY_CURRENT_USER 0xFFFFFFEEL 109 #define HKEY_USERS 0xFFFFFFEDL 110 #define HKEY_CLASSES_ROOT 0xFFFFFFECL 111 112 //#define DELETE 0x00010000 113 #define READ_CONTROL 0x00020000 114 //#define WRITE_DAC 0x00040000 115 //#define WRITE_OWNER 0x00080000 116 //#define SYNCHRONIZE 0x00100000 117 118 //#define SPECIFIC_RIGHTS_ALL 0x0000FFFF 119 //#define STANDARD_RIGHTS_READ (READ_CONTROL) 120 //#define STANDARD_RIGHTS_WRITE (READ_CONTROL) 121 //#define STANDARD_RIGHTS_EXECUTE (READ_CONTROL) 122 //#define STANDARD_RIGHTS_REQUIRED 0x000F0000 123 #define STANDARD_RIGHTS_ALL 0x001F0000 124 125 #define KEY_QUERY_VALUE 0x0001 126 #define KEY_SET_VALUE 0x0002 127 #define KEY_CREATE_SUB_KEY 0x0004 128 #define KEY_ENUMERATE_SUB_KEYS 0x0008 129 #define KEY_NOTIFY 0x0010 130 #define KEY_CREATE_LINK 0x0020 131 132 #define REG_OPTION_NON_VOLATILE 0x00000000L 133 #define REG_OPTION_VOLATILE 0x00000001L 134 #define REG_CREATED_NEW_KEY 0x00000001L 135 #define REG_OPENED_EXISTING_KEY 0x00000002L 136 137 #define KEY_READ READ_CONTROL | KEY_QUERY_VALUE |\ 138 KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY 139 140 #define KEY_WRITE READ_CONTROL | KEY_SET_VALUE | KEY_CREATE_SUB_KEY 141 142 #define KEY_EXECUTE KEY_READ 143 144 #define KEY_ALL_ACCESS STANDARD_RIGHTS_ALL | KEY_QUERY_VALUE |\ 145 KEY_SET_VALUE | KEY_CREATE_SUB_KEY |\ 146 KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY |\ 147 KEY_CREATE_LINK 148 149 #define REG_NONE 0 150 #define REG_SZ 1 151 #define REG_EXPAND_SZ 2 152 #define REG_BINARY 3 153 #define REG_DWORD 4 154 #define REG_DWORD_LITTLE_ENDIAN 4 155 #define REG_DWORD_BIG_ENDIAN 5 156 #define REG_LINK 6 157 #define REG_MULTI_SZ 7 158 #define REG_RESOURCE_LIST 8 159 160 /* These definitions come from winreg.h from MSVC 6.0 */ 161 LONG APIENTRY RegCloseKey( HKEY hKey ); 162 LONG APIENTRY RegCreateKeyExA( HKEY hKey, LPCSTR lpSubKey, DWORD Reserved, LPSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition ); 163 LONG APIENTRY RegCreateKeyExW( HKEY hKey,LPCWSTR lpSubKey, DWORD Reserved, LPWSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition ); 164 LONG APIENTRY RegDeleteKeyA( HKEY hKey, LPCSTR lpSubKey); 165 LONG APIENTRY RegDeleteKeyW( HKEY hKey, LPCWSTR lpSubKey); 166 LONG APIENTRY RegDeleteValueA( HKEY hKey, LPCSTR lpValueName ); 167 LONG APIENTRY RegDeleteValueW( HKEY hKey, LPCWSTR lpValueName ); 168 LONG APIENTRY RegEnumKeyExA( HKEY hKey, DWORD dwIndex, LPSTR lpName, LPDWORD lpcbName, LPDWORD lpReserved, LPSTR lpClass, LPDWORD lpcbClass, PFILETIME lpftLastWriteTime ); 169 LONG APIENTRY RegEnumKeyExW( HKEY hKey, DWORD dwIndex, LPWSTR lpName, LPDWORD lpcbName, LPDWORD lpReserved, LPWSTR lpClass, LPDWORD lpcbClass, PFILETIME lpftLastWriteTime); 170 LONG APIENTRY RegEnumValueA( HKEY hKey, DWORD dwIndex, LPSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ); 171 LONG APIENTRY RegEnumValueW( HKEY hKey, DWORD dwIndex, LPWSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ); 172 LONG APIENTRY RegFlushKey( HKEY hKey ); 173 LONG APIENTRY RegOpenKeyExA( HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult ); 174 LONG APIENTRY RegOpenKeyExW( HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult ); 175 LONG APIENTRY RegQueryInfoKeyA( HKEY hKey, LPSTR lpClass, LPDWORD lpcbClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcbMaxSubKeyLen, LPDWORD lpcbMaxClassLen, LPDWORD lpcValues, LPDWORD lpcbMaxValueNameLen, LPDWORD lpcbMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime ); 176 LONG APIENTRY RegQueryInfoKeyW( HKEY hKey, LPWSTR lpClass, LPDWORD lpcbClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcbMaxSubKeyLen, LPDWORD lpcbMaxClassLen, LPDWORD lpcValues, LPDWORD lpcbMaxValueNameLen, LPDWORD lpcbMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime ); 177 LONG APIENTRY RegQueryValueExA( HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ); 178 LONG APIENTRY RegQueryValueExW( HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ); 179 LONG APIENTRY RegSetValueExA( HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE* lpData, DWORD cbData ); 180 LONG APIENTRY RegSetValueExW( HKEY hKey, LPCWSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE* lpData, DWORD cbData ); 181 182 /* These definitions come from winerror.h from MSVC 6.0 */ 183 #define ERROR_SUCCESS 0L 184 #define ERROR_FILE_NOT_FOUND 2L 185 #define ERROR_ACCESS_DENIED 5L 186 #define ERROR_NO_MORE_ITEMS 259L 187 188 } /* extern "C" */ 189 190 /* End of Win32 definitions */ 51 191 52 192 QT_BEGIN_NAMESPACE … … 132 272 { 133 273 QString result; 134 QT_WA({ 135 wchar_t *data = 0; 136 FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 137 0, errorCode, 0, 138 data, 0, 0); 139 result = QString::fromUtf16(reinterpret_cast<const ushort *> (data)); 140 if (data != 0) 141 LocalFree(data); 142 }, { 143 char *data = 0; 144 FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 145 0, errorCode, 0, 146 (char *)&data, 0, 0); 147 result = QString::fromLocal8Bit(data); 148 if (data != 0) 149 LocalFree(data); 150 }) 151 if (result.endsWith(QLatin1String("\n"))) 152 result.truncate(result.length() - 1); 274 switch (errorCode) { 275 case ERROR_FILE_NOT_FOUND: 276 result = "ERROR_FILE_NOT_FOUND"; break; 277 case ERROR_ACCESS_DENIED: 278 result = "ERROR_ACCESS_DENIED"; break; 279 case ERROR_NO_MORE_ITEMS: 280 result = "ERROR_NO_MORE_ITEMS"; break; 281 default: 282 result = QString().sprintf("Error %lu", errorCode); 283 break; 284 } 153 285 154 286 return result; … … 634 766 if (deleteWriteHandleOnExit && writeHandle() != 0) { 635 767 #if defined(Q_OS_WINCE) 636 remove(regList.at(0).key()); 768 remove(regList.at(0).key()); 637 769 #else 638 770 DWORD res; … … 795 927 796 928 case QVariant::ByteArray: 797 // On Win95/98/Me QString::toLocal8Bit() fails to handle chars > 0x7F. So we don't go through variantToString() at all.798 if (QSysInfo::WindowsVersion & QSysInfo::WV_DOS_based) {799 QByteArray ba = value.toByteArray();800 regValueBuff = "@ByteArray(";801 regValueBuff += ba;802 regValueBuff += ')';803 if (ba.contains('\0')) {804 type = REG_BINARY;805 } else {806 type = REG_SZ;807 regValueBuff += '\0';808 }809 810 break;811 }812 929 // fallthrough intended 813 930
Note:
See TracChangeset
for help on using the changeset viewer.