WinRT: Introduced qfunctions_winrt
Using the same approach as, wince qfunctions_winrt is introduced to replace functions not available on Windows Runtime by their successor functions/ equivalents. Additionally this functionality is used for implementing a fake environment because WinRT does not support getting/setting of environment variables. The approach here is also the same that is used for wince. Change-Id: Ifc3b6b796ab8e8ea41456f4c929f9c3f65f24a0e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Andrew Knight <andrew.knight@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>bb10
parent
8cc0f19f83
commit
f89d30aa34
|
|
@ -0,0 +1,141 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the qmake spec of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU General Public License version 3.0 requirements will be
|
||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QPLATFORMDEFS_H
|
||||
#define QPLATFORMDEFS_H
|
||||
|
||||
#ifdef UNICODE
|
||||
#ifndef _UNICODE
|
||||
#define _UNICODE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Get Qt defines/settings
|
||||
|
||||
#include "qglobal.h"
|
||||
#include "qfunctions_winrt.h"
|
||||
|
||||
#define _POSIX_
|
||||
#include <limits.h>
|
||||
#undef _POSIX_
|
||||
|
||||
#include <tchar.h>
|
||||
#include <io.h>
|
||||
#include <direct.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef QT_LARGEFILE_SUPPORT
|
||||
#define QT_STATBUF struct _stati64 // non-ANSI defs
|
||||
#define QT_STATBUF4TSTAT struct _stati64 // non-ANSI defs
|
||||
#define QT_STAT ::_stati64
|
||||
#define QT_FSTAT ::_fstati64
|
||||
#else
|
||||
#define QT_STATBUF struct _stat // non-ANSI defs
|
||||
#define QT_STATBUF4TSTAT struct _stat // non-ANSI defs
|
||||
#define QT_STAT ::_stat
|
||||
#define QT_FSTAT ::_fstat
|
||||
#endif
|
||||
#define QT_STAT_REG _S_IFREG
|
||||
#define QT_STAT_DIR _S_IFDIR
|
||||
#define QT_STAT_MASK _S_IFMT
|
||||
#if defined(_S_IFLNK)
|
||||
# define QT_STAT_LNK _S_IFLNK
|
||||
#endif
|
||||
#define QT_FILENO _fileno
|
||||
#define QT_OPEN ::_open
|
||||
#define QT_CLOSE ::_close
|
||||
#ifdef QT_LARGEFILE_SUPPORT
|
||||
#define QT_LSEEK ::_lseeki64
|
||||
#define QT_TSTAT ::_tstati64
|
||||
#else
|
||||
#define QT_LSEEK ::_lseek
|
||||
#define QT_TSTAT ::_tstat
|
||||
#endif
|
||||
#define QT_READ ::_read
|
||||
#define QT_WRITE ::_write
|
||||
#define QT_ACCESS ::_access
|
||||
#define QT_GETCWD ::_getcwd
|
||||
#define QT_CHDIR ::_chdir
|
||||
#define QT_MKDIR ::_mkdir
|
||||
#define QT_RMDIR ::_rmdir
|
||||
#define QT_OPEN_LARGEFILE 0
|
||||
#define QT_OPEN_RDONLY _O_RDONLY
|
||||
#define QT_OPEN_WRONLY _O_WRONLY
|
||||
#define QT_OPEN_RDWR _O_RDWR
|
||||
#define QT_OPEN_CREAT _O_CREAT
|
||||
#define QT_OPEN_TRUNC _O_TRUNC
|
||||
#define QT_OPEN_APPEND _O_APPEND
|
||||
#if defined(O_TEXT)
|
||||
# define QT_OPEN_TEXT _O_TEXT
|
||||
# define QT_OPEN_BINARY _O_BINARY
|
||||
#endif
|
||||
|
||||
#include "../common/c89/qplatformdefs.h"
|
||||
|
||||
#ifdef QT_LARGEFILE_SUPPORT
|
||||
#undef QT_FSEEK
|
||||
#undef QT_FTELL
|
||||
#undef QT_OFF_T
|
||||
|
||||
#define QT_FSEEK ::_fseeki64
|
||||
#define QT_FTELL ::_ftelli64
|
||||
#define QT_OFF_T __int64
|
||||
#endif
|
||||
|
||||
#define QT_SIGNAL_ARGS int
|
||||
|
||||
#define QT_VSNPRINTF(buffer, count, format, arg) \
|
||||
vsnprintf_s(buffer, count, count-1, format, arg)
|
||||
|
||||
#define QT_SNPRINTF ::_snprintf
|
||||
|
||||
# define F_OK 0
|
||||
# define X_OK 1
|
||||
# define W_OK 2
|
||||
# define R_OK 4
|
||||
|
||||
typedef int mode_t;
|
||||
|
||||
#endif // QPLATFORMDEFS_H
|
||||
|
|
@ -39,4 +39,4 @@
|
|||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
||||
|
|
|
|||
|
|
@ -39,4 +39,4 @@
|
|||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
||||
|
|
|
|||
|
|
@ -39,4 +39,4 @@
|
|||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
||||
|
|
|
|||
|
|
@ -39,4 +39,4 @@
|
|||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
||||
|
|
|
|||
|
|
@ -39,4 +39,4 @@
|
|||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
||||
|
|
|
|||
|
|
@ -91,6 +91,13 @@ wince*: {
|
|||
kernel/qfunctions_wince.h
|
||||
}
|
||||
|
||||
winrt {
|
||||
SOURCES += \
|
||||
kernel/qfunctions_winrt.cpp
|
||||
HEADERS += \
|
||||
kernel/qfunctions_winrt.h
|
||||
}
|
||||
|
||||
mac {
|
||||
SOURCES += \
|
||||
kernel/qcoreapplication_mac.cpp
|
||||
|
|
|
|||
|
|
@ -61,6 +61,8 @@
|
|||
# include "QtCore/qfunctions_vxworks.h"
|
||||
#elif defined(Q_OS_NACL)
|
||||
# include "QtCore/qfunctions_nacl.h"
|
||||
#elif defined(Q_OS_WINRT)
|
||||
# include "QtCore/qfunctions_winrt.h"
|
||||
#endif
|
||||
|
||||
#ifdef Q_CC_RVCT
|
||||
|
|
|
|||
|
|
@ -0,0 +1,105 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU General Public License version 3.0 requirements will be
|
||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
#ifdef Q_OS_WINRT
|
||||
|
||||
#include "qfunctions_winrt.h"
|
||||
#include "qstring.h"
|
||||
#include "qbytearray.h"
|
||||
#include "qhash.h"
|
||||
|
||||
QT_USE_NAMESPACE
|
||||
|
||||
// Environment ------------------------------------------------------
|
||||
inline QHash<QByteArray, QByteArray> &qt_app_environment()
|
||||
{
|
||||
static QHash<QByteArray, QByteArray> internalEnvironment;
|
||||
return internalEnvironment;
|
||||
}
|
||||
|
||||
errno_t qt_winrt_getenv_s(size_t* sizeNeeded, char* buffer, size_t bufferSize, const char* varName)
|
||||
{
|
||||
if (!sizeNeeded)
|
||||
return EINVAL;
|
||||
|
||||
if (!qt_app_environment().contains(varName)) {
|
||||
if (buffer)
|
||||
buffer[0] = '\0';
|
||||
return ENOENT;
|
||||
}
|
||||
|
||||
QByteArray value = qt_app_environment().value(varName);
|
||||
if (!value.endsWith('\0')) // win32 guarantees terminated string
|
||||
value.append('\0');
|
||||
|
||||
if (bufferSize < (size_t)value.size()) {
|
||||
*sizeNeeded = value.size();
|
||||
return 0;
|
||||
}
|
||||
|
||||
strcpy(buffer, value.constData());
|
||||
return 0;
|
||||
}
|
||||
|
||||
errno_t qt_winrt__putenv_s(const char* varName, const char* value)
|
||||
{
|
||||
QByteArray input = value;
|
||||
if (input.isEmpty()) {
|
||||
if (qt_app_environment().contains(varName))
|
||||
qt_app_environment().remove(varName);
|
||||
} else {
|
||||
// win32 on winrt guarantees terminated string
|
||||
if (!input.endsWith('\0'))
|
||||
input.append('\0');
|
||||
qt_app_environment()[varName] = input;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qt_winrt_tzset()
|
||||
{
|
||||
}
|
||||
|
||||
void qt_winrt__tzset()
|
||||
{
|
||||
}
|
||||
|
||||
#endif // Q_OS_WINRT
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU General Public License version 3.0 requirements will be
|
||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QFUNCTIONS_WINRT_H
|
||||
#define QFUNCTIONS_WINRT_H
|
||||
|
||||
#include <QtCore/qglobal.h>
|
||||
|
||||
#ifdef Q_OS_WINRT
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
#ifdef QT_BUILD_CORE_LIB
|
||||
#endif
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
// Environment ------------------------------------------------------
|
||||
errno_t qt_winrt_getenv_s(size_t*, char*, size_t, const char*);
|
||||
errno_t qt_winrt__putenv_s(const char*, const char*);
|
||||
void qt_winrt_tzset();
|
||||
void qt_winrt__tzset();
|
||||
|
||||
// As Windows Runtime lacks some standard functions used in Qt, these got
|
||||
// reimplemented. Other projects do this as well. Inline functions are used
|
||||
// that there is a central place to disable functions for newer versions if
|
||||
// they get available. There are no defines used anymore, because this
|
||||
// will break member functions of classes which are called like these
|
||||
// functions.
|
||||
// The other declarations available in this file are being used per
|
||||
// define inside qplatformdefs.h of the corresponding WinRT mkspec.
|
||||
|
||||
#define generate_inline_return_func0(funcname, returntype) \
|
||||
inline returntype funcname() \
|
||||
{ \
|
||||
return qt_winrt_##funcname(); \
|
||||
}
|
||||
#define generate_inline_return_func1(funcname, returntype, param1) \
|
||||
inline returntype funcname(param1 p1) \
|
||||
{ \
|
||||
return qt_winrt_##funcname(p1); \
|
||||
}
|
||||
#define generate_inline_return_func2(funcname, returntype, param1, param2) \
|
||||
inline returntype funcname(param1 p1, param2 p2) \
|
||||
{ \
|
||||
return qt_winrt_##funcname(p1, p2); \
|
||||
}
|
||||
#define generate_inline_return_func3(funcname, returntype, param1, param2, param3) \
|
||||
inline returntype funcname(param1 p1, param2 p2, param3 p3) \
|
||||
{ \
|
||||
return qt_winrt_##funcname(p1, p2, p3); \
|
||||
}
|
||||
#define generate_inline_return_func4(funcname, returntype, param1, param2, param3, param4) \
|
||||
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4) \
|
||||
{ \
|
||||
return qt_winrt_##funcname(p1, p2, p3, p4); \
|
||||
}
|
||||
#define generate_inline_return_func5(funcname, returntype, param1, param2, param3, param4, param5) \
|
||||
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4, param5 p5) \
|
||||
{ \
|
||||
return qt_winrt_##funcname(p1, p2, p3, p4, p5); \
|
||||
}
|
||||
#define generate_inline_return_func6(funcname, returntype, param1, param2, param3, param4, param5, param6) \
|
||||
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4, param5 p5, param6 p6) \
|
||||
{ \
|
||||
return qt_winrt_##funcname(p1, p2, p3, p4, p5, p6); \
|
||||
}
|
||||
#define generate_inline_return_func7(funcname, returntype, param1, param2, param3, param4, param5, param6, param7) \
|
||||
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4, param5 p5, param6 p6, param7 p7) \
|
||||
{ \
|
||||
return qt_winrt_##funcname(p1, p2, p3, p4, p5, p6, p7); \
|
||||
}
|
||||
|
||||
typedef unsigned (__stdcall *StartAdressExFunc)(void *);
|
||||
typedef void(*StartAdressFunc)(void *);
|
||||
typedef int ( __cdecl *CompareFunc ) (const void *, const void *) ;
|
||||
|
||||
generate_inline_return_func4(getenv_s, errno_t, size_t *, char *, size_t, const char *)
|
||||
generate_inline_return_func2(_putenv_s, errno_t, const char *, const char *)
|
||||
generate_inline_return_func0(tzset, void)
|
||||
generate_inline_return_func0(_tzset, void)
|
||||
|
||||
#endif // Q_OS_WINRT
|
||||
#endif // QFUNCTIONS_WINRT_H
|
||||
Loading…
Reference in New Issue