Changeset 23


Ignore:
Timestamp:
Jun 8, 2009, 11:33:03 PM (16 years ago)
Author:
Dmitry A. Kuminov
Message:

corelib: Implemented OS/2 version of QSettings.

Location:
trunk
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/qmake/Makefile.os2-g++

    r18 r23  
    7979        qurl.obj \
    8080        qsettings.obj \
    81         qsettings_pm.obj \
     81        qsettings_os2.obj \
    8282        qvariant.obj \
    8383        qmetatype.obj \
     
    145145        $(CXX) $(CXXFLAGS) $(BUILD_PATH)/src/corelib/global/qconfig.cpp
    146146
    147 qsettings_pm.obj: $(SOURCE_PATH)/src/corelib/io/qsettings_pm.cpp
    148         $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qsettings_pm.cpp
     147qsettings_os2.obj: $(SOURCE_PATH)/src/corelib/io/qsettings_os2.cpp
     148        $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qsettings_os2.cpp
    149149
    150150qsettings.obj: $(SOURCE_PATH)/src/corelib/io/qsettings.cpp
  • trunk/src/corelib/io/qsettings_os2.cpp

    r22 r23  
    33** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    44** Contact: Qt Software Information (qt-info@nokia.com)
     5**
     6** Copyright (C) 2009 netlabs.org. OS/2 parts.
    57**
    68** This file is part of the QtCore module of the Qt Toolkit.
     
    4749#include "qvector.h"
    4850#include "qmap.h"
    49 #include "qt_windows.h"
    5051#include "qdebug.h"
     52
     53/*******************************************************************************
     54** Define some Win32 stuff to use Open32 Reg* functions from REGISTRY.DLL
     55*/
     56
     57extern "C" {
     58
     59/* No UNICODE support on OS/2 */
     60#define QT_WA( uni, ansi ) ansi
     61
     62typedef wchar_t WCHAR;
     63typedef WCHAR TCHAR;
     64
     65/* These definitions come from os2wdef.h in the OS/2 Toolkit */
     66
     67#define APIENTRY    _System
     68
     69typedef char                CHAR ,   *PCHAR ,  *LPCHAR;
     70typedef int                 INT,     *PINT,    *LPINT;
     71typedef long                LONG,    *PLONG,   *LPLONG;
     72typedef unsigned char       UCHAR ,  *PUCHAR,  *LPUCHAR;
     73typedef unsigned long       ULONG ,  *PULONG , *LPULONG;
     74typedef void                VOID,    *PVOID,   *LPVOID;
     75
     76typedef UCHAR               BYTE,    *PBYTE,   *LPBYTE;
     77typedef ULONG               DWORD,   *PDWORD,  *LPDWORD;
     78
     79typedef INT                 BOOL,    *PBOOL,   *LPBOOL;
     80
     81typedef WCHAR               *LPWSTR, *PWSTR;
     82typedef const WCHAR         *LPCWSTR, *PCWSTR;
     83
     84typedef CHAR                *LPSTR,  *PSTR;
     85typedef const CHAR          *LPCSTR, *PCSTR;
     86
     87#define CONST       const
     88
     89/* These definitions come from os2win.h in the OS/2 Toolkit */
     90
     91typedef DWORD       ACCESS_MASK;
     92typedef ACCESS_MASK REGSAM;
     93
     94typedef DWORD       HKEY, *PHKEY;
     95
     96typedef struct _tagSECURITY_ATTRIBUTES {
     97    DWORD                            nLength;
     98    LPVOID                           lpSecurityDescriptor;
     99    BOOL                             bInheritHandle;
     100} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
     101
     102typedef 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 */
     161LONG APIENTRY RegCloseKey( HKEY hKey );
     162LONG APIENTRY RegCreateKeyExA( HKEY hKey, LPCSTR lpSubKey, DWORD Reserved, LPSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition );
     163LONG APIENTRY RegCreateKeyExW( HKEY hKey,LPCWSTR lpSubKey, DWORD Reserved, LPWSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition );
     164LONG APIENTRY RegDeleteKeyA( HKEY hKey, LPCSTR lpSubKey);
     165LONG APIENTRY RegDeleteKeyW( HKEY hKey, LPCWSTR lpSubKey);
     166LONG APIENTRY RegDeleteValueA( HKEY hKey, LPCSTR lpValueName );
     167LONG APIENTRY RegDeleteValueW( HKEY hKey, LPCWSTR lpValueName );
     168LONG APIENTRY RegEnumKeyExA( HKEY hKey, DWORD dwIndex, LPSTR lpName, LPDWORD lpcbName, LPDWORD lpReserved, LPSTR lpClass, LPDWORD lpcbClass, PFILETIME lpftLastWriteTime );
     169LONG APIENTRY RegEnumKeyExW( HKEY hKey, DWORD dwIndex, LPWSTR lpName, LPDWORD lpcbName, LPDWORD lpReserved, LPWSTR lpClass, LPDWORD lpcbClass, PFILETIME lpftLastWriteTime);
     170LONG APIENTRY RegEnumValueA( HKEY hKey, DWORD dwIndex, LPSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData );
     171LONG APIENTRY RegEnumValueW( HKEY hKey, DWORD dwIndex, LPWSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData );
     172LONG APIENTRY RegFlushKey( HKEY hKey );
     173LONG APIENTRY RegOpenKeyExA( HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult );
     174LONG APIENTRY RegOpenKeyExW( HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult );
     175LONG 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 );
     176LONG 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 );
     177LONG APIENTRY RegQueryValueExA( HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData );
     178LONG APIENTRY RegQueryValueExW( HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData );
     179LONG APIENTRY RegSetValueExA( HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE* lpData, DWORD cbData );
     180LONG 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 */
    51191
    52192QT_BEGIN_NAMESPACE
     
    132272{
    133273    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    }
    153285
    154286    return result;
     
    634766    if (deleteWriteHandleOnExit && writeHandle() != 0) {
    635767#if defined(Q_OS_WINCE)
    636         remove(regList.at(0).key()); 
     768        remove(regList.at(0).key());
    637769#else
    638770        DWORD res;
     
    795927
    796928        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             }
    812929            // fallthrough intended
    813930
Note: See TracChangeset for help on using the changeset viewer.