forked from Public-Mirror/Textractor
starting commit
This commit is contained in:
parent
5985972c6f
commit
9914ab9985
33
vnr/CMakeLists.txt
Normal file
33
vnr/CMakeLists.txt
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
set(CMAKE_CONFIGURATION_TYPES Debug Release)
|
||||||
|
|
||||||
|
project(vnr)
|
||||||
|
|
||||||
|
set(WDK_HOME "C:\\WinDDK\\7600.16385.1" CACHE FILEPATH "path to the Windows DDK directory")
|
||||||
|
|
||||||
|
add_definitions(
|
||||||
|
-DUNICODE
|
||||||
|
-D_UNICODE
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(${PROJECT_SOURCE_DIR})
|
||||||
|
|
||||||
|
set(common_src
|
||||||
|
${PROJECT_SOURCE_DIR}/ith/common/const.h
|
||||||
|
${PROJECT_SOURCE_DIR}/ith/common/defs.h
|
||||||
|
${PROJECT_SOURCE_DIR}/ith/common/except.h
|
||||||
|
${PROJECT_SOURCE_DIR}/ith/common/growl.h
|
||||||
|
${PROJECT_SOURCE_DIR}/ith/common/memory.h
|
||||||
|
${PROJECT_SOURCE_DIR}/ith/common/types.h
|
||||||
|
)
|
||||||
|
|
||||||
|
set(import_src
|
||||||
|
${PROJECT_SOURCE_DIR}/ith/import/mono/funcinfo.h
|
||||||
|
${PROJECT_SOURCE_DIR}/ith/import/mono/types.h
|
||||||
|
${PROJECT_SOURCE_DIR}/ith/import/ppsspp/funcinfo.h
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory(ith/hook)
|
||||||
|
add_subdirectory(ith/host)
|
||||||
|
add_subdirectory(ith/sys)
|
21
vnr/ccutil/ccmacro.h
Normal file
21
vnr/ccutil/ccmacro.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef CCMACRO_H
|
||||||
|
#define CCMACRO_H
|
||||||
|
|
||||||
|
// ccmacro.h
|
||||||
|
// 12/9/2011 jichi
|
||||||
|
|
||||||
|
#define CC_UNUSED(_var) (void)(_var)
|
||||||
|
#define CC_NOP CC_UNUSED(0)
|
||||||
|
|
||||||
|
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
|
||||||
|
# define CC_LIKELY(expr) __builtin_expect(!!(expr), true)
|
||||||
|
# define CC_UNLIKELY(expr) __builtin_expect(!!(expr), false)
|
||||||
|
#else
|
||||||
|
# define CC_LIKELY(x) (x)
|
||||||
|
# define CC_UNLIKELY(x) (x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CC_MIN(x, y) ((x) < (y) ? (x) : (y))
|
||||||
|
#define CC_MAX(x, y) ((x) < (y) ? (y) : (x))
|
||||||
|
|
||||||
|
#endif // CCMACRO_H
|
11
vnr/ccutil/ccutil.pri
Normal file
11
vnr/ccutil/ccutil.pri
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# ccutil.pri
|
||||||
|
# 1/31/2012 jichi
|
||||||
|
|
||||||
|
DEFINES += WITH_LIB_CCUTIL
|
||||||
|
|
||||||
|
DEPENDPATH += $$PWD
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
$$PWD/ccmacro.h
|
||||||
|
|
||||||
|
# EOF
|
596
vnr/config.pri
Normal file
596
vnr/config.pri
Normal file
@ -0,0 +1,596 @@
|
|||||||
|
# config.pri
|
||||||
|
# 9/3/2011 jichi
|
||||||
|
|
||||||
|
## Locations
|
||||||
|
|
||||||
|
ROOTDIR = $$PWD
|
||||||
|
BUILDDIR = $$ROOTDIR/build
|
||||||
|
|
||||||
|
SRCDIR = $$ROOTDIR/cpp
|
||||||
|
CONFDIR = $$SRCDIR/conf
|
||||||
|
LIBDIR = $$SRCDIR/libs
|
||||||
|
COMDIR = $$SRCDIR/coms
|
||||||
|
PLUGINDIR = $$SRCDIR/plugins
|
||||||
|
#SERVICEDIR = $$SRCDIR/services
|
||||||
|
|
||||||
|
DESTDIR = $$BUILDDIR
|
||||||
|
#win32: DESTDIR_TARGET = $$BUILDDIR/release.win
|
||||||
|
#unix: DESTDIR_TARGET = $$BUILDDIR/release.unix
|
||||||
|
#mac: DESTDIR_TARGET = $$BUILDDIR/release.mac
|
||||||
|
|
||||||
|
LIBS += -L$$DESTDIR
|
||||||
|
mac: LIBS += -F$$DESTDIR
|
||||||
|
|
||||||
|
INCLUDEPATH += \
|
||||||
|
$$SRCDIR \
|
||||||
|
$$LIBDIR \
|
||||||
|
$$COMDIR \
|
||||||
|
$$PLUGINDIR \
|
||||||
|
$$SERVICEDIR
|
||||||
|
|
||||||
|
## Qt Translation
|
||||||
|
|
||||||
|
CODECFORTR = UTF-8
|
||||||
|
#CODECFORSRC = UTF-8 # there are sources in SJIS encoding
|
||||||
|
|
||||||
|
## Compiling options
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
win32: DEFINES += UNICODE # force using UNICODE interface by default
|
||||||
|
|
||||||
|
# Mac
|
||||||
|
#CONFIG += x86 x86_64 ppc64
|
||||||
|
mac: CONFIG -= ppc ppc64 # disable compiling fat architectures
|
||||||
|
|
||||||
|
# Enable C++11
|
||||||
|
win32: QMAKE_CXXFLAGS += -Zc:auto
|
||||||
|
unix: QMAKE_CXXFLAGS += -std=c++11
|
||||||
|
mac {
|
||||||
|
# Enable TR1 such as tuple
|
||||||
|
# Clang is required to take place of llvm gcc, which uses /usr/lib/libstdc++.dylib
|
||||||
|
QMAKE_CXXFLAGS += -stdlib=libc++
|
||||||
|
QMAKE_LFLAGS += -stdlib=libc++
|
||||||
|
}
|
||||||
|
|
||||||
|
# MSVC warnings
|
||||||
|
win32 {
|
||||||
|
# Disable checked iterator and compiler warning.
|
||||||
|
# SCL: http://msdn.microsoft.com/en-us/library/aa985896.aspx
|
||||||
|
# SCL Warning: http://msdn.microsoft.com/en-us/library/aa985974.aspx
|
||||||
|
# Performance comparison: http://askldjd.wordpress.com/2009/09/13/stl-performance-comparison-vc71-vc90-and-stlport/
|
||||||
|
DEFINES += _SECURE_SCL=0 _SCL_SECURE_NO_WARNINGS
|
||||||
|
|
||||||
|
# Disable CRT string function warnings
|
||||||
|
DEFINES += _CRT_SECURE_NO_WARNINGS
|
||||||
|
|
||||||
|
# Disable CRT posix warnings
|
||||||
|
#DEFINES += _CRT_NONSTDC_NO_DEPRECATE
|
||||||
|
|
||||||
|
QMAKE_CXXFLAGS += -wd4819 # ignore the warning on Japanese characters
|
||||||
|
}
|
||||||
|
|
||||||
|
## External Libraries
|
||||||
|
|
||||||
|
win32 {
|
||||||
|
D3D_HOME = "$$PROGRAMFILES/Microsoft DirectX SDK"
|
||||||
|
DETOURS_HOME = "$$PROGRAMFILES/Microsoft Research/Detours Express 3.0"
|
||||||
|
#DEV_HOME = c:/dev
|
||||||
|
DEV_HOME = z:/local/windows/developer
|
||||||
|
BOOST_HOME = $$DEV_HOME/boost/build
|
||||||
|
#ITH_HOME = $$DEV_HOME/ith
|
||||||
|
MSIME_HOME = $$DEV_HOME/msime
|
||||||
|
#PYTHON_HOME = $$ROOTDIR/../Python
|
||||||
|
#PYTHON_HOME = C:/Python
|
||||||
|
PYTHON_HOME = Z:/Local/Windows/Developer/Python
|
||||||
|
PYSIDE_HOME = $$PYTHON_HOME/Lib/site-packages/PySide
|
||||||
|
QT_HOME = c:/qt/4
|
||||||
|
QT_SRC = c:/qt
|
||||||
|
SAPI_HOME = "$$PROGRAMFILES/Microsoft Speech SDK 5.1"
|
||||||
|
#WMSDK_HOME = c:/wmsdk/wmpsdk9
|
||||||
|
WDK7_HOME = c:/winddk/7600.16385.1
|
||||||
|
WDK8_HOME = "$$PROGRAMFILES/Windows Kits/8.1"
|
||||||
|
UTF8_HOME = z:/users/jichi/opt/utf8
|
||||||
|
}
|
||||||
|
mac {
|
||||||
|
MACPORTS_HOME = /opt/local
|
||||||
|
BOOST_HOME = $$MACPORTS_HOME
|
||||||
|
DEV_HOME = ${HOME}/opt
|
||||||
|
#ITH_HOME = ${HOME}/opt/ith
|
||||||
|
MSIME_HOME = $$DEV_HOME/msime
|
||||||
|
PYSIDE_HOME = $$MACPORTS_HOME
|
||||||
|
PYTHON_HOME = $$MACPORTS_HOME/Library/Frameworks/Python.framework/Versions/Current
|
||||||
|
#QT_HOME = ${HOME}/opt/qt
|
||||||
|
QT_HOME = $$MACPORTS_HOME
|
||||||
|
QT_SRC = ${HOME}/src
|
||||||
|
UTF8_HOME = $$DEV_HOME/utf8
|
||||||
|
}
|
||||||
|
|
||||||
|
INCLUDEPATH += $$BOOST_HOME $$BOOST_HOME/include
|
||||||
|
LIBS += -L$$BOOST_HOME/lib
|
||||||
|
|
||||||
|
# Disable automatically linking with boost silently
|
||||||
|
# See: http://www.boost.org/doc/libs/1_56_0/boost/config/user.hpp
|
||||||
|
DEFINES += BOOST_ALL_NO_LIB
|
||||||
|
mac: BOOST_VARIANT = -mt
|
||||||
|
|
||||||
|
## Config
|
||||||
|
|
||||||
|
CONFIG(release) {
|
||||||
|
message(CONFIG release)
|
||||||
|
#DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(noqt) {
|
||||||
|
message(CONFIG noqt)
|
||||||
|
CONFIG += noqtcore noqtgui
|
||||||
|
CONFIG -= qt
|
||||||
|
}
|
||||||
|
CONFIG(noqtcore) {
|
||||||
|
message(CONFIG noqtcore)
|
||||||
|
QT -= core
|
||||||
|
LIBS -= -lQtCore
|
||||||
|
}
|
||||||
|
CONFIG(noqtgui) {
|
||||||
|
message(CONFIG noqtgui)
|
||||||
|
QT -= gui
|
||||||
|
LIBS -= -lQtGui
|
||||||
|
mac: CONFIG -= app_bundle
|
||||||
|
}
|
||||||
|
|
||||||
|
win32 {
|
||||||
|
CONFIG(nocrt) { # No runtime CRT. Use -MT for static linking.
|
||||||
|
message(CONFIG nocrt)
|
||||||
|
QMAKE_CFLAGS -= -MD -MDd
|
||||||
|
QMAKE_CFLAGS_DEBUG -= -MD -MDd
|
||||||
|
QMAKE_CFLAGS_RELEASE -= -MD -MDd
|
||||||
|
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO -= -MD -MDd
|
||||||
|
QMAKE_CXXFLAGS -= -MD -MDd
|
||||||
|
QMAKE_CXXFLAGS_DEBUG -= -MD -MDd
|
||||||
|
QMAKE_CXXFLAGS_RELEASE -= -MD -MDd
|
||||||
|
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -MD -MDd
|
||||||
|
#QMAKE_LFLAGS += -NODEFAULTLIB:msvcrt.lib \
|
||||||
|
# -NODEFAULTLIB:msvcrtd.lib
|
||||||
|
}
|
||||||
|
|
||||||
|
# http://social.msdn.microsoft.com/Forums/vstudio/en-US/96c906d9-de1d-4ace-af37-71169617b6ff/destructors-and-seh
|
||||||
|
CONFIG(eha) { # Catch all exceptions
|
||||||
|
message(CONFIG eha)
|
||||||
|
QMAKE_CXXFLAGS_STL_ON -= -EHsc
|
||||||
|
QMAKE_CXXFLAGS_EXCEPTIONS_ON -= -EHsc
|
||||||
|
QMAKE_CXXFLAGS_STL_ON += -EHa
|
||||||
|
QMAKE_CXXFLAGS_EXCEPTIONS_ON += -EHa
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(noeh) { # No Exception handler
|
||||||
|
message(CONFIG noeh)
|
||||||
|
#CONFIG -= rtti #-exceptions -stl
|
||||||
|
QMAKE_CXXFLAGS += /GR-
|
||||||
|
QMAKE_CXXFLAGS_RTTI_ON -= -GR
|
||||||
|
|
||||||
|
QMAKE_CXXFLAGS_STL_ON -= -EHsc
|
||||||
|
QMAKE_CXXFLAGS_EXCEPTIONS_ON -= -EHsc
|
||||||
|
|
||||||
|
CONFIG(dll) {
|
||||||
|
QMAKE_LFLAGS += /ENTRY:"DllMain"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(nosafeseh) { # No Exception handler
|
||||||
|
message(CONFIG nosafeseh)
|
||||||
|
|
||||||
|
# Disable SafeSEH table
|
||||||
|
# http://stackoverflow.com/questions/19722308/exception-handler-not-called-in-c/20344222
|
||||||
|
# Alternative way: Register handler using MASM
|
||||||
|
# http://stackoverflow.com/questions/12019689/custom-seh-handler-with-safeseh
|
||||||
|
QMAKE_LFLAGS += -safeseh:no
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(gdb) {
|
||||||
|
message(CONFIG gdb)
|
||||||
|
QMAKE_CXXFLAGS += -g -ggdb
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(lldb) {
|
||||||
|
message(CONFIG lldb)
|
||||||
|
QMAKE_CXXFLAGS += -g #-glldb
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(qmlplugin) {
|
||||||
|
message(CONFIG qmlplugin)
|
||||||
|
QT += core declarative
|
||||||
|
win32: CONFIG += dll
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(pysideplugin) {
|
||||||
|
message(CONFIG pysideplugin)
|
||||||
|
CONFIG += pyplugin shiboken
|
||||||
|
QT += core
|
||||||
|
|
||||||
|
LIBS += -L$$PYSIDE_HOME -lpyside-python2.7
|
||||||
|
INCLUDEPATH += \
|
||||||
|
$$PYSIDE_HOME/include/PySide \
|
||||||
|
$$PYSIDE_HOME/include/PySide-2.7 \
|
||||||
|
$$PYSIDE_HOME/include \
|
||||||
|
$$PYSIDE_HOME/include/PySide/QtCore \
|
||||||
|
$$PYSIDE_HOME/include/PySide/QtGui \
|
||||||
|
$$QT_HOME/include/QtGui # needed by pyside qtcore
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(shiboken) {
|
||||||
|
message(CONFIG shiboken)
|
||||||
|
|
||||||
|
LIBS += -L$$PYSIDE_HOME -lshiboken-python2.7
|
||||||
|
INCLUDEPATH += \
|
||||||
|
$$PYSIDE_HOME/include/shiboken \
|
||||||
|
$$PYSIDE_HOME/include/shiboken-2.7
|
||||||
|
|
||||||
|
# Ignore warnings from Shiboken and PySide
|
||||||
|
mac {
|
||||||
|
QMAKE_CXXFLAGS_WARN_ON += \
|
||||||
|
-Wno-header-guard \
|
||||||
|
-Wno-mismatched-tags \
|
||||||
|
-Wno-missing-field-initializers \
|
||||||
|
-Wno-unused-parameter
|
||||||
|
}
|
||||||
|
win32 {
|
||||||
|
# QMAKE_CXXFLAGS_WARN_ON does not work on windows
|
||||||
|
#
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# pragma warning (disable:4099) // C4099: mix class and struct
|
||||||
|
# pragma warning (disable:4100) // C4100: unreferenced parametter
|
||||||
|
# pragma warning (disable:4244) // C4244: conversion lost of data
|
||||||
|
# pragma warning (disable:4390) // C4390: empty controlled statement
|
||||||
|
# pragma warning (disable:4522) // C4522: multiple assignment operators
|
||||||
|
# pragma warning (disable:4800) // C4800: forcing value to bool
|
||||||
|
#endif // _MSC_VER
|
||||||
|
QMAKE_CXXFLAGS += -wd4099 -wd4100 -wd4244 -wd4390 -wd4522 -wd4800
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(pyplugin) {
|
||||||
|
message(CONFIG pyplugin)
|
||||||
|
INCLUDEPATH += $$PYTHON_HOME/include/python2.7 $$PYTHON_HOME/include
|
||||||
|
|
||||||
|
unix: LIBS += -L$$PYTHON_HOME/lib -lpython2.7
|
||||||
|
win32: LIBS += -L$$PYTHON_HOME/libs -lpython27
|
||||||
|
|
||||||
|
unix: QMAKE_EXTENSION_SHLIB = so
|
||||||
|
win32: QMAKE_EXTENSION_SHLIB = pyd
|
||||||
|
win32: CONFIG += dll
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG(qt) {
|
||||||
|
message(CONFIG qt)
|
||||||
|
INCLUDEPATH += $$QT_SRC $$QT_SRC/qt # always allow access to Qt source code
|
||||||
|
|
||||||
|
# Clang: Disable warning while processing Qt library headers
|
||||||
|
# http://stackoverflow.com/questions/17846909/how-can-i-stop-warnings-about-unused-private-fields
|
||||||
|
mac {
|
||||||
|
QMAKE_CXXFLAGS_WARN_ON += -Wno-deprecated-register # register storage class specifier is deprecated
|
||||||
|
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-private-field # private field 'type' is not used in qmime.h
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# EOF
|
||||||
|
|
||||||
|
## Debug
|
||||||
|
|
||||||
|
#include($$ROOTDIR/lib/debug/debug.pri)
|
||||||
|
|
||||||
|
## Deploy
|
||||||
|
|
||||||
|
#DEFINES += VERSION=\\\"$$VERSION\\\"
|
||||||
|
|
||||||
|
## IDs
|
||||||
|
|
||||||
|
# Azure Market Key: https://datamarket.azure.com/account/datasets
|
||||||
|
#DEFINES += CONFIG_AZURE_ID=\\\"tuSmXew4CSnnGaX0vZyYdNLCrlInvAUepCX6p5l5THc=\\\"
|
||||||
|
|
||||||
|
# Yahoo!JAPAN AppID: https://e.developer.yahoo.co.jp/dashboard/
|
||||||
|
#DEFINES += CONFIG_YAHOO_ID=\\\"mRr.UCWxg65ZTZTR_Mz0OTtj3sJ7xa5K66ZOGp55cgJsIDDeaB6e1LDY1NpEZ_AfZA--\\\"
|
||||||
|
|
||||||
|
## Deploy
|
||||||
|
# See: http://wiki.maemo.org/Packaging_a_Qt_application
|
||||||
|
# See: http://www.developer.nokia.com/Community/Wiki/Creating_Debian_packages_for_Maemo_5_Qt_applications_and_showing_in_the_application_menu
|
||||||
|
# See: https://wiki.kubuntu.org/PackagingGuide/QtApplication
|
||||||
|
|
||||||
|
#QMLDIR=$$DESTDIR/qml
|
||||||
|
#LUADIR=$$DESTDIR/lua
|
||||||
|
#DOCDIR=$$DESTDIR/doc
|
||||||
|
#TABLEDIR=$$DESTDIR/table
|
||||||
|
#IMAGEDIR=$$DESTDIR/images
|
||||||
|
#JSFDIR=$$DESTDIR/jsf
|
||||||
|
#AVATARDIR=$$DESTDIR/avatars
|
||||||
|
|
||||||
|
#unix:!mac {
|
||||||
|
# isEmpty(PREFIX): PREFIX = /usr
|
||||||
|
# BINDIR = $$PREFIX/bin
|
||||||
|
# DATADIR = $$PREFIX/share
|
||||||
|
#}
|
||||||
|
#mac {
|
||||||
|
# isEmpty(PREFIX): PREFIX = /opt/annot
|
||||||
|
# BINDIR = $$PREFIX/bin
|
||||||
|
# DATADIR = $$PREFIX/share
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
#!win32 {
|
||||||
|
# DEFINES += \
|
||||||
|
# BINDIR=\\\"$$BINDIR\\\" \
|
||||||
|
# DATADIR=\\\"$$DATADIR\\\"
|
||||||
|
#}
|
||||||
|
#DEFINES += \
|
||||||
|
# AVATARDIR=\\\"$$AVATARDIR\\\" \
|
||||||
|
# DOCDIR=\\\"$$DOCDIR\\\" \
|
||||||
|
# TABLEDIR=\\\"$$TABLEDIR\\\" \
|
||||||
|
# IMAGEDIR=\\\"$$IMAGDIR\\\" \
|
||||||
|
# LUADIR=\\\"$$LUADIR\\\" \
|
||||||
|
# JSFDIR=\\\"$$JSFDIR\\\"
|
||||||
|
|
||||||
|
## External libraries
|
||||||
|
|
||||||
|
#win32 {
|
||||||
|
# DEV_HOME = c:/dev
|
||||||
|
# #DEV_HOME = B:/Developer
|
||||||
|
# QT_HOME = c:/qt/qt4
|
||||||
|
# QT_SRC = c:/qt
|
||||||
|
# QT5_HOME = c:/qt/qt5
|
||||||
|
# QT5_SRC = c:/qt
|
||||||
|
# #VLC_HOME = "c:/Program Files/VideoLAN/VLC/sdk"
|
||||||
|
# VLC_HOME = $$DEV_HOME/vlc
|
||||||
|
# VLC_SRC = $$VLC_HOME/src
|
||||||
|
# #WSF_HOME = $$DEV_HOME/wso2
|
||||||
|
# #CDIO_HOME = $$DEV_HOME/cdio
|
||||||
|
# #FFMPEG_HOME = $$DEV_HOME/ffmpeg
|
||||||
|
# GPAC_HOME = $$DEV_HOME/gpac
|
||||||
|
# MP4V2_HOME = $$DEV_HOME/mp4v2
|
||||||
|
# LIVE_HOME = $$DEV_HOME/live
|
||||||
|
# POPPLER_HOME = $$DEV_HOME/poppler
|
||||||
|
# BOOST_HOME = $$DEV_HOME/boost
|
||||||
|
# GSOAP_HOME = $$DEV_HOME/gsoap
|
||||||
|
# GSOAP_SRC = $$DEV_HOME/gsoap/src
|
||||||
|
# ZDEV_HOME = $$DEV_HOME/zlib
|
||||||
|
# LUA_HOME = $$DEV_HOME/lua
|
||||||
|
# FREETYPE_HOME = $$DEV_HOME/freetype
|
||||||
|
# FONTCONFIG_HOME = $$DEV_HOME/fontconfig
|
||||||
|
# MECAB_HOME = $$DEV_HOME/mecab
|
||||||
|
# #LUA_VERSION = 52
|
||||||
|
# #LUA_VERSION = 5.1
|
||||||
|
# LUA_VERSION =
|
||||||
|
#
|
||||||
|
# ITH_HOME = $$DEV_HOME/ith
|
||||||
|
#
|
||||||
|
# WDK_HOME = c:/winddk/current
|
||||||
|
#
|
||||||
|
# INCLUDEPATH += $$DEV_HOME/inttypes/include
|
||||||
|
#
|
||||||
|
# INCLUDEPATH += $$ITH_HOME/include
|
||||||
|
# LIBS += -L$$ITH_HOME/lib
|
||||||
|
#
|
||||||
|
# # wdk/inc/api/sal.h MUST be removed.
|
||||||
|
# # See: http://stackoverflow.com/questions/1356653/multiple-compiling-errors-with-basic-c-application-on-vs2010-beta-1
|
||||||
|
# # Select WinXP x86
|
||||||
|
# INCLUDEPATH += $$WDK_HOME/inc
|
||||||
|
# LIBS += -L$$WDK_HOME/lib/wxp/i386
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
#unix {
|
||||||
|
# X11_HOME = /usr/X11
|
||||||
|
# QT_HOME = /usr/share/qt4
|
||||||
|
# QT_SRC =
|
||||||
|
# VLC_HOME = /usr
|
||||||
|
# VLC_SRC = ${HOME}/opt/src
|
||||||
|
# #WSF_HOME = ${HOME}/opt/wso2/wsf
|
||||||
|
# #CDIO_HOME = /usr
|
||||||
|
# #FFMPEG_HOME = /usr
|
||||||
|
# MECAB_HOME = /usr
|
||||||
|
# GPAC_HOME = /usr
|
||||||
|
# MP4V2_HOME = /usr
|
||||||
|
# LIVE_HOME = /usr
|
||||||
|
# POPPLER_HOME = ${HOME}/opt/poppler
|
||||||
|
# BOOST_HOME = /usr
|
||||||
|
# GSOAP_HOME = ${HOME}/opt/gsoap
|
||||||
|
# GSOAP_SRC = ${HOME}/opt/src/gsoap
|
||||||
|
# LUA_HOME = /usr
|
||||||
|
# ZDEV_HOME = /usr
|
||||||
|
# FREETYPE_HOME = $$X11_HOME
|
||||||
|
# FONTCONFIG_HOME = $$X11_HOME
|
||||||
|
# LUA_VERSION = 5.1
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
#mac {
|
||||||
|
# SDK_HOME = /Developer/SDKs/MacOSX10.7.sdk
|
||||||
|
# X11_HOME = $$SDK_HOME/usr/X11
|
||||||
|
# MACPORTS_HOME = /opt/local
|
||||||
|
# QT_HOME = ${HOME}/opt/qt
|
||||||
|
# QT_SRC = ${HOME}/opt/src
|
||||||
|
# QT5_HOME = ${HOME}/opt/qt5
|
||||||
|
# QT5_SRC = ${HOME}/opt/src
|
||||||
|
# #VLC_HOME = ${HOME}/opt/vlc
|
||||||
|
# VLC_HOME = /Applications/VLC.app/Contents/MacOS
|
||||||
|
# VLC_SRC = ${HOME}/opt/src
|
||||||
|
# #WSF_HOME = ${HOME}/opt/wso2/wsf
|
||||||
|
# #CDIO_HOME = ${HOME}/opt/libcdio
|
||||||
|
# #FFMPEG_HOME = $$MACPORTS_HOME
|
||||||
|
# GPAC_HOME = ${HOME}/opt/gpac
|
||||||
|
# MP4V2_HOME = $$MACPORTS_HOME
|
||||||
|
# MECAB_HOME = $$MACPORTS_HOME
|
||||||
|
# LIVE_HOME = ${HOME}/opt/live
|
||||||
|
# POPPLER_HOME = ${HOME}/opt/poppler
|
||||||
|
# BOOST_HOME = $$MACPORTS_HOME
|
||||||
|
# GSOAP_HOME = ${HOME}/opt/gsoap
|
||||||
|
# GSOAP_SRC = ${HOME}/opt/src/gsoap
|
||||||
|
# ZDEV_HOME = $$SDK_HOME/usr
|
||||||
|
# FREETYPE_HOME = $$X11_HOME
|
||||||
|
# FONTCONFIG_HOME = $$X11_HOME
|
||||||
|
# #LUA_HOME = ${HOME}/opt/lua
|
||||||
|
# LUA_HOME = $$MACPORTS_HOME
|
||||||
|
# #LUA_VERSION = 52
|
||||||
|
# LUA_VERSION =
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
#INCLUDEPATH += $$QT_SRC/qt/src
|
||||||
|
##INCLUDEPATH += $$QT5_SRC/qt/src
|
||||||
|
#
|
||||||
|
#INCLUDEPATH += $$VLC_HOME/include
|
||||||
|
#INCLUDEPATH += $$VLC_HOME/include/vlc/plugins
|
||||||
|
##INCLUDEPATH += $$VLC_SRC/include
|
||||||
|
#LIBS += -L$$VLC_HOME/lib
|
||||||
|
##INCLUDEPATH += $$WSF_HOME/include
|
||||||
|
##LIBS += -L$$WSF_HOME/lib
|
||||||
|
##INCLUDEPATH += $$CDIO_HOME/include
|
||||||
|
##LIBS += -L$$CDIO_HOME/lib
|
||||||
|
##INCLUDEPATH += $$POPPLER_HOME/include/poppler/qt4
|
||||||
|
##LIBS += -L$$POPPLER_HOME/lib
|
||||||
|
#INCLUDEPATH += $$BOOST_HOME/include
|
||||||
|
#LIBS += -L$$BOOST_HOME/lib
|
||||||
|
#INCLUDEPATH += $$GSOAP_HOME/include
|
||||||
|
##LIBS += -L$$GSOAP_HOME/lib
|
||||||
|
#INCLUDEPATH += $$ZDEV_HOME/include
|
||||||
|
#LIBS += -L$$ZDEV_HOME/lib
|
||||||
|
#INCLUDEPATH += $$MECAB_HOME/include
|
||||||
|
#LIBS += -L$$MECAB_HOME/lib
|
||||||
|
#INCLUDEPATH += $$FREETYPE_HOME/include \
|
||||||
|
# $$FREETYPE_HOME/include/freetype2
|
||||||
|
#LIBS += -L$$FREETYPE_HOME/lib
|
||||||
|
#INCLUDEPATH += $$FONTCONFIG_HOME/include
|
||||||
|
#LIBS += -L$$FONTCONFIG_HOME/lib
|
||||||
|
#INCLUDEPATH += $$LUA_HOME/include \
|
||||||
|
# $$LUA_HOME/include/lua$$LUA_VERSION
|
||||||
|
#LIBS += -L$$LUA_HOME/lib
|
||||||
|
##INCLUDEPATH += $$FFMPEG_HOME/include
|
||||||
|
##LIBS += -L$$FFMPEG_HOME/lib
|
||||||
|
##INCLUDEPATH += $$GPAC_HOME/include
|
||||||
|
##LIBS += -L$$GPAC_HOME/lib
|
||||||
|
##INCLUDEPATH += $$MP4V2_HOME/include
|
||||||
|
##LIBS += -L$$MP4V2_HOME/lib
|
||||||
|
##INCLUDEPATH += \
|
||||||
|
## $$LIVE_HOME/BasicUsageEnvironment/include \
|
||||||
|
## $$LIVE_HOME/UsageEnvironment/include \
|
||||||
|
## $$LIVE_HOME/groupsock/include \
|
||||||
|
## $$LIVE_HOME/liveMedia/include
|
||||||
|
# #$$LIVE_HOME/BasicUsageEnvironment $$LIVE_HOME/BasicUsageEnvironment/include \
|
||||||
|
# #$$LIVE_HOME/UsageEnvironment $$LIVE_HOME/UsageEnvironment/include \
|
||||||
|
# #$$LIVE_HOME/groupsock $$LIVE_HOME/groupsock/include \
|
||||||
|
# #$$LIVE_HOME/liveMedia $$LIVE_HOME/liveMedia/include
|
||||||
|
##LIBS += \
|
||||||
|
## -L$$LIVE_HOME/BasicUsageEnvironment \
|
||||||
|
## -L$$LIVE_HOME/UsageEnvironment \
|
||||||
|
## -L$$LIVE_HOME/groupsock \
|
||||||
|
## -L$$LIVE_HOME/liveMedia
|
||||||
|
#
|
||||||
|
#mac: INCLUDEPATH += $$SDK_HOME/usr/include
|
||||||
|
|
||||||
|
#
|
||||||
|
# assistant.pro - Qt 4.7.3
|
||||||
|
#
|
||||||
|
#include(../../../shared/fontpanel/fontpanel.pri)
|
||||||
|
#TEMPLATE = app
|
||||||
|
#LANGUAGE = C++
|
||||||
|
#TARGET = assistant
|
||||||
|
#contains(QT_CONFIG, webkit):QT += webkit
|
||||||
|
#CONFIG += qt \
|
||||||
|
# warn_on \
|
||||||
|
# help
|
||||||
|
#QT += network
|
||||||
|
#PROJECTNAME = Assistant
|
||||||
|
#DESTDIR = ../../../../bin
|
||||||
|
#target.path = $$[QT_INSTALL_BINS]
|
||||||
|
#INSTALLS += target
|
||||||
|
#DEPENDPATH += ../shared
|
||||||
|
#
|
||||||
|
## ## Work around a qmake issue when statically linking to
|
||||||
|
## ## not-yet-installed plugins
|
||||||
|
#QMAKE_LIBDIR += $$QT_BUILD_TREE/plugins/sqldrivers
|
||||||
|
#HEADERS += aboutdialog.h \
|
||||||
|
# bookmarkdialog.h \
|
||||||
|
# bookmarkfiltermodel.h \
|
||||||
|
# bookmarkitem.h \
|
||||||
|
# bookmarkmanager.h \
|
||||||
|
# bookmarkmanagerwidget.h \
|
||||||
|
# bookmarkmodel.h \
|
||||||
|
# centralwidget.h \
|
||||||
|
# cmdlineparser.h \
|
||||||
|
# contentwindow.h \
|
||||||
|
# findwidget.h \
|
||||||
|
# filternamedialog.h \
|
||||||
|
# helpenginewrapper.h \
|
||||||
|
# helpviewer.h \
|
||||||
|
# indexwindow.h \
|
||||||
|
# installdialog.h \
|
||||||
|
# mainwindow.h \
|
||||||
|
# preferencesdialog.h \
|
||||||
|
# qtdocinstaller.h \
|
||||||
|
# remotecontrol.h \
|
||||||
|
# searchwidget.h \
|
||||||
|
# topicchooser.h \
|
||||||
|
# tracer.h \
|
||||||
|
# xbelsupport.h \
|
||||||
|
# ../shared/collectionconfiguration.h
|
||||||
|
#contains(QT_CONFIG, webkit) {
|
||||||
|
# HEADERS += helpviewer_qwv.h
|
||||||
|
#} else {
|
||||||
|
# HEADERS += helpviewer_qtb.h
|
||||||
|
# }
|
||||||
|
#win32:HEADERS += remotecontrol_win.h
|
||||||
|
#
|
||||||
|
#SOURCES += aboutdialog.cpp \
|
||||||
|
# bookmarkdialog.cpp \
|
||||||
|
# bookmarkfiltermodel.cpp \
|
||||||
|
# bookmarkitem.cpp \
|
||||||
|
# bookmarkmanager.cpp \
|
||||||
|
# bookmarkmanagerwidget.cpp \
|
||||||
|
# bookmarkmodel.cpp \
|
||||||
|
# centralwidget.cpp \
|
||||||
|
# cmdlineparser.cpp \
|
||||||
|
# contentwindow.cpp \
|
||||||
|
# findwidget.cpp \
|
||||||
|
# filternamedialog.cpp \
|
||||||
|
# helpenginewrapper.cpp \
|
||||||
|
# helpviewer.cpp \
|
||||||
|
# indexwindow.cpp \
|
||||||
|
# installdialog.cpp \
|
||||||
|
# main.cpp \
|
||||||
|
# mainwindow.cpp \
|
||||||
|
# preferencesdialog.cpp \
|
||||||
|
# qtdocinstaller.cpp \
|
||||||
|
# remotecontrol.cpp \
|
||||||
|
# searchwidget.cpp \
|
||||||
|
# topicchooser.cpp \
|
||||||
|
# xbelsupport.cpp \
|
||||||
|
# ../shared/collectionconfiguration.cpp
|
||||||
|
# contains(QT_CONFIG, webkit) {
|
||||||
|
# SOURCES += helpviewer_qwv.cpp
|
||||||
|
#} else {
|
||||||
|
# SOURCES += helpviewer_qtb.cpp
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
#FORMS += bookmarkdialog.ui \
|
||||||
|
# bookmarkmanagerwidget.ui \
|
||||||
|
# bookmarkwidget.ui \
|
||||||
|
# filternamedialog.ui \
|
||||||
|
# installdialog.ui \
|
||||||
|
# preferencesdialog.ui \
|
||||||
|
# topicchooser.ui
|
||||||
|
#
|
||||||
|
#RESOURCES += assistant.qrc \
|
||||||
|
# assistant_images.qrc
|
||||||
|
#
|
||||||
|
#win32 {
|
||||||
|
# !wince*:LIBS += -lshell32
|
||||||
|
# RC_FILE = assistant.rc
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
#mac {
|
||||||
|
# ICON = assistant.icns
|
||||||
|
# TARGET = Assistant
|
||||||
|
# QMAKE_INFO_PLIST = Info_mac.plist
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
#contains(CONFIG, static): {
|
||||||
|
# SQLPLUGINS = $$unique(sql-plugins)
|
||||||
|
# contains(SQLPLUGINS, sqlite): {
|
||||||
|
# QTPLUGIN += qsqlite
|
||||||
|
# DEFINES += USE_STATIC_SQLITE_PLUGIN
|
||||||
|
# }
|
||||||
|
#}
|
20
vnr/copy_vnr.cmd
Normal file
20
vnr/copy_vnr.cmd
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal
|
||||||
|
if [%1] == [] (
|
||||||
|
echo usage: copy_vnr <path-to-Sakura-directory>
|
||||||
|
goto :EOF
|
||||||
|
)
|
||||||
|
xcopy %1\config.pri . /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\ccutil ccutil /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\cpputil cpputil /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\disasm disasm /S /Y /I /EXCLUDE:exclude.txt
|
||||||
|
xcopy %1\cpp\plugins\ith ith /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\memdbg memdbg /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\ntdll ntdll /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\ntinspect ntinspect /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\winmaker winmaker /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\winmutex winmutex /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\winversion winversion /S /Y /I
|
||||||
|
xcopy %1\cpp\libs\winseh winseh /S /Y /I
|
||||||
|
|
||||||
|
endlocal
|
2
vnr/winmutex/winmutex
Normal file
2
vnr/winmutex/winmutex
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "winmutex/winmutex.h"
|
166
vnr/winmutex/winmutex.h
Normal file
166
vnr/winmutex/winmutex.h
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
#pragma once
|
||||||
|
// winmutex.h
|
||||||
|
// 12/11/2011 jichi
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# pragma warning(disable:4800) // C4800: forcing value to bool
|
||||||
|
#endif // _MSC_VER
|
||||||
|
|
||||||
|
// Mutex lock
|
||||||
|
// The interface of this class is consistent with the mutex class
|
||||||
|
|
||||||
|
template <typename _Mutex>
|
||||||
|
class win_mutex_lock
|
||||||
|
{
|
||||||
|
typedef win_mutex_lock<_Mutex> _Self;
|
||||||
|
win_mutex_lock(const _Self&);
|
||||||
|
_Self &operator=(const _Self&);
|
||||||
|
|
||||||
|
_Mutex &_M_mutex;
|
||||||
|
bool _M_locked;
|
||||||
|
public:
|
||||||
|
typedef _Mutex mutex_type;
|
||||||
|
typedef typename _Mutex::native_handle_type native_handle_type;
|
||||||
|
explicit win_mutex_lock(mutex_type &mutex)
|
||||||
|
: _M_mutex(mutex), _M_locked(false) { lock(); }
|
||||||
|
~win_mutex_lock() { if (_M_locked) _M_mutex.unlock(); }
|
||||||
|
mutex_type &mutex() { return _M_mutex; }
|
||||||
|
//bool isLock() const { return _M_locked; }
|
||||||
|
native_handle_type native_handle() { return _M_mutex.native_handle(); }
|
||||||
|
void unlock() { _M_mutex.unlock(); _M_locked = false; }
|
||||||
|
void lock() { _M_mutex.lock(); _M_locked = true; }
|
||||||
|
bool tryLock() { return _M_locked = _M_mutex.tryLock(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
// Mutex
|
||||||
|
|
||||||
|
template <typename _Mutex, size_t _Irql = 0>
|
||||||
|
class win_mutex
|
||||||
|
{
|
||||||
|
typedef win_mutex<_Mutex> _Self;
|
||||||
|
typedef _Mutex __native_type;
|
||||||
|
enum { __minimal_irql = _Irql };
|
||||||
|
__native_type _M_mutex;
|
||||||
|
|
||||||
|
win_mutex(const _Self&);
|
||||||
|
_Self &operator=(const _Self&);
|
||||||
|
private:
|
||||||
|
win_mutex() {}
|
||||||
|
typedef __native_type *native_handle_type;
|
||||||
|
native_handle_type native_handle() { return &_M_mutex; }
|
||||||
|
static size_t minimal_irql() { return __minimal_irql; }
|
||||||
|
|
||||||
|
void unlock() {}
|
||||||
|
void lock() {}
|
||||||
|
bool try_lock() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
class IHFSERVICE win_mutex<CRITICAL_SECTION>
|
||||||
|
{
|
||||||
|
typedef win_mutex<CRITICAL_SECTION> _Self;
|
||||||
|
typedef CRITICAL_SECTION __native_type;
|
||||||
|
enum { __minimal_irql = 0 };
|
||||||
|
win_mutex(const _Self&);
|
||||||
|
_Self &operator=(const _Self&);
|
||||||
|
|
||||||
|
__native_type _M_mutex;
|
||||||
|
public:
|
||||||
|
typedef __native_type *native_handle_type;
|
||||||
|
native_handle_type native_handle() { return &_M_mutex; }
|
||||||
|
static size_t minimal_irql() { return __minimal_irql; }
|
||||||
|
|
||||||
|
win_mutex() { ::InitializeCriticalSection(&_M_mutex); }
|
||||||
|
~win_mutex() { ::DeleteCriticalSection(&_M_mutex); }
|
||||||
|
void lock() { ::EnterCriticalSection(&_M_mutex); }
|
||||||
|
void unlock() { ::LeaveCriticalSection(&_M_mutex); }
|
||||||
|
bool try_lock() { return ::TryEnterCriticalSection(&_M_mutex); }
|
||||||
|
};
|
||||||
|
|
||||||
|
// Conditional variable
|
||||||
|
|
||||||
|
template <typename _Cond>
|
||||||
|
class win_mutex_cond
|
||||||
|
{
|
||||||
|
typedef win_mutex_cond<_Cond> _Self;
|
||||||
|
typedef _Cond __native_type;
|
||||||
|
win_mutex_cond(const _Self&);
|
||||||
|
_Self &operator=(const _Self&);
|
||||||
|
|
||||||
|
__native_type _M_cond;
|
||||||
|
public:
|
||||||
|
enum wait_status { no_timeout = 0, timeout };
|
||||||
|
typedef __native_type *native_handle_type;
|
||||||
|
|
||||||
|
win_mutex_cond() {}
|
||||||
|
native_handle_type native_handle() { return &_M_cond; }
|
||||||
|
|
||||||
|
void notify_one() {}
|
||||||
|
void notify_all() {}
|
||||||
|
|
||||||
|
template <typename _Mutex>
|
||||||
|
void wait(_Mutex &mutex) {}
|
||||||
|
|
||||||
|
template <typename _Mutex, typename _Pred>
|
||||||
|
void wait(_Mutex &mutex, _Pred pred) {}
|
||||||
|
|
||||||
|
template <typename _Mutex>
|
||||||
|
wait_status wait_for(_Mutex &mutex, int msecs) {}
|
||||||
|
|
||||||
|
template <typename _Mutex, typename _Pred>
|
||||||
|
wait_status wait_for(_Mutex &mutex, int msecs, _Pred pred) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Note: Conditional variables are NOT availabe on Windows XP/2003
|
||||||
|
// See: http://en.cppreference.com/w/cpp/thread/condition_variable
|
||||||
|
// See: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686903%28v=vs.85%29.aspx
|
||||||
|
template <>
|
||||||
|
class win_mutex_cond<CONDITION_VARIABLE>
|
||||||
|
{
|
||||||
|
typedef win_mutex_cond<CONDITION_VARIABLE> _Self;
|
||||||
|
typedef CONDITION_VARIABLE __native_type;
|
||||||
|
win_mutex_cond(const _Self&);
|
||||||
|
_Self &operator=(const _Self&);
|
||||||
|
|
||||||
|
__native_type _M_cond;
|
||||||
|
public:
|
||||||
|
enum wait_status { no_timeout = 0, timeout };
|
||||||
|
typedef __native_type *native_handle_type;
|
||||||
|
native_handle_type native_handle() { return &_M_cond; }
|
||||||
|
|
||||||
|
win_mutex_cond() { ::InitializeConditionVariable(&_M_cond); }
|
||||||
|
|
||||||
|
void notify_one() { ::WakeConditionVariable(&_M_cond); }
|
||||||
|
void notify_all() { ::WakeAllConditionVariable(&_M_cond); }
|
||||||
|
|
||||||
|
template <typename _Mutex>
|
||||||
|
void wait(_Mutex &mutex)
|
||||||
|
{ ::SleepConditionVariableCS(&_M_cond, mutex.native_handle(), INFINITE); }
|
||||||
|
|
||||||
|
template <typename _Mutex, typename _Pred>
|
||||||
|
void wait(_Mutex &mutex, _Pred pred)
|
||||||
|
{ while (!pred()) wait(mutex); }
|
||||||
|
|
||||||
|
template <typename _Mutex>
|
||||||
|
wait_status wait_for(_Mutex &mutex, int msecs)
|
||||||
|
{ return ::SleepConditionVariableCS(&_M_cond, mutex.native_handle(), msecs) ? no_timeout : timeout; }
|
||||||
|
|
||||||
|
template <typename _Mutex, typename _Pred>
|
||||||
|
wait_status wait_for(_Mutex &mutex, int msecs, _Pred pred)
|
||||||
|
{
|
||||||
|
auto start = ::GetTickCount();
|
||||||
|
while (!pred()) {
|
||||||
|
auto now = ::GetTickCount();
|
||||||
|
msecs -= now - start;
|
||||||
|
if (msecs <= 0)
|
||||||
|
return timeout;
|
||||||
|
start = now;
|
||||||
|
wait_for(mutex, msecs);
|
||||||
|
}
|
||||||
|
return no_timeout;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// EOF
|
13
vnr/winmutex/winmutex.pri
Normal file
13
vnr/winmutex/winmutex.pri
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# winmutex.pri
|
||||||
|
# 3/8/2013 jichi
|
||||||
|
|
||||||
|
DEFINES += WITH_LIB_WINMUTEX
|
||||||
|
|
||||||
|
DEPENDPATH += $$PWD
|
||||||
|
#LIBS += -lkernel32 -luser32
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
$$PWD/winmutex \
|
||||||
|
$$PWD/winmutex.h
|
||||||
|
|
||||||
|
# EOF
|
26
vnr/winseh/Makefile
Normal file
26
vnr/winseh/Makefile
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Makefile
|
||||||
|
# 12/13/2013 jichi
|
||||||
|
# This file is for Windows only.
|
||||||
|
# Compile SAFESEH table from the ASM file.
|
||||||
|
# See: http://stackoverflow.com/questions/19722308/exception-handler-not-called-in-c
|
||||||
|
# See: ::http://stackoverflow.com/questions/12019689/custom-seh-handler-with-safeseh
|
||||||
|
# See: http://msdn.microsoft.com/en-us/library/16aexws6.aspx
|
||||||
|
|
||||||
|
BUILDDIR = ../../../build
|
||||||
|
OBJ = $(BUILDDIR)/safeseh.obj
|
||||||
|
|
||||||
|
ML = ml
|
||||||
|
CFLAGS =
|
||||||
|
|
||||||
|
.PHONY: all compile clean
|
||||||
|
|
||||||
|
all: compile
|
||||||
|
|
||||||
|
compile: $(OBJ)
|
||||||
|
|
||||||
|
$(OBJ): safeseh.asm
|
||||||
|
$(ML) $(CFLAGS) -Fo $@ -c -safeseh $^
|
||||||
|
|
||||||
|
clean:
|
||||||
|
|
||||||
|
# EOF
|
21
vnr/winseh/safeseh.asm
Normal file
21
vnr/winseh/safeseh.asm
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
; safeseh.asm
|
||||||
|
; 12/13/2013 jichi
|
||||||
|
; see: http://stackoverflow.com/questions/12019689/custom-seh-handler-with-safeseh
|
||||||
|
; see: http://code.metager.de/source/xref/WebKit/Source/WebCore/platform/win/makesafeseh.asm
|
||||||
|
; see: http://jpassing.com/2008/05/20/fun-with-low-level-seh/
|
||||||
|
.386
|
||||||
|
.model flat, stdcall
|
||||||
|
option casemap :none
|
||||||
|
|
||||||
|
; The symbol name can be found out using: dumpbin /symbols winseh.obj
|
||||||
|
extern _seh_handler:near ; defined in winseh.cc
|
||||||
|
|
||||||
|
_seh_asm_handler proto
|
||||||
|
.safeseh _seh_asm_handler
|
||||||
|
|
||||||
|
.code
|
||||||
|
_seh_asm_handler proc
|
||||||
|
jmp _seh_handler
|
||||||
|
_seh_asm_handler endp
|
||||||
|
|
||||||
|
end
|
52
vnr/winseh/winseh.cc
Normal file
52
vnr/winseh/winseh.cc
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// winseh.cc
|
||||||
|
// 12/13/2013 jichi
|
||||||
|
|
||||||
|
#include "winseh/winseh.h"
|
||||||
|
#include "ntdll/ntdll.h"
|
||||||
|
//#include <cstdio>
|
||||||
|
|
||||||
|
// - Global variables -
|
||||||
|
|
||||||
|
seh_dword_t seh_esp[seh_capacity],
|
||||||
|
seh_eip[seh_capacity],
|
||||||
|
seh_eh[seh_capacity];
|
||||||
|
seh_dword_t seh_count;
|
||||||
|
|
||||||
|
// - Exception handlers -
|
||||||
|
|
||||||
|
// VC 2013: http://msdn.microsoft.com/en-us/library/b6sf5kbd.aspx
|
||||||
|
// typedef EXCEPTION_DISPOSITION (*PEXCEPTION_ROUTINE) (
|
||||||
|
// _In_ PEXCEPTION_RECORD ExceptionRecord,
|
||||||
|
// _In_ ULONG64 EstablisherFrame,
|
||||||
|
// _Inout_ PCONTEXT ContextRecord,
|
||||||
|
// _Inout_ PDISPATCHER_CONTEXT DispatcherContext
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// winnt.h: http://www.codemachine.com/downloads/win81/ntdef.h
|
||||||
|
// typedef
|
||||||
|
// __drv_sameIRQL
|
||||||
|
// __drv_functionClass(EXCEPTION_ROUTINE)
|
||||||
|
// EXCEPTION_DISPOSITION
|
||||||
|
// NTAPI
|
||||||
|
// EXCEPTION_ROUTINE (
|
||||||
|
// _Inout_ struct _EXCEPTION_RECORD *ExceptionRecord,
|
||||||
|
// _In_ PVOID EstablisherFrame,
|
||||||
|
// _In_ struct _CONTEXT *ContextRecord,
|
||||||
|
// _In_ PVOID DispatcherContext
|
||||||
|
// );
|
||||||
|
extern "C" EXCEPTION_DISPOSITION _seh_handler( // extern C is needed to avoid name hashing in C++
|
||||||
|
_In_ PEXCEPTION_RECORD ExceptionRecord,
|
||||||
|
_In_ PVOID EstablisherFrame, // does not work if I use ULONG64
|
||||||
|
_Inout_ PCONTEXT ContextRecord,
|
||||||
|
_In_ PVOID DispatcherContext) // PDISPATCHER_CONTEXT is not declared in windows.h
|
||||||
|
{
|
||||||
|
//assert(::seh_count > 0);
|
||||||
|
ContextRecord->Esp = ::seh_esp[::seh_count - 1];
|
||||||
|
ContextRecord->Eip = ::seh_eip[::seh_count - 1];
|
||||||
|
//printf("seh_handler:%i,%x,%x\n", ::seh_count, ContextRecord->Esp, ContextRecord->Eip);
|
||||||
|
return ::seh_eh[::seh_count - 1] ?
|
||||||
|
reinterpret_cast<PEXCEPTION_ROUTINE>(::seh_eh[::seh_count - 1])(ExceptionRecord, EstablisherFrame, ContextRecord, DispatcherContext) :
|
||||||
|
ExceptionContinueExecution;
|
||||||
|
}
|
||||||
|
|
||||||
|
// EOF
|
150
vnr/winseh/winseh.h
Normal file
150
vnr/winseh/winseh.h
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// winseh.h
|
||||||
|
// 12/13/2013 jichi
|
||||||
|
// See: http://code.metager.de/source/xref/WebKit/Source/WebCore/platform/win/makesafeseh.asm
|
||||||
|
// See: http://jpassing.com/2008/05/20/fun-with-low-level-seh/
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# pragma warning (disable:4733) // C4733: Inline asm assigning to 'FS:0' : handler not registered as safe handler
|
||||||
|
#endif // _MSC_VER
|
||||||
|
|
||||||
|
#define SEH_RAISE (*(int*)0 = 0) // raise C000005, for debugging only
|
||||||
|
|
||||||
|
// Maximum number of nested SEH
|
||||||
|
// Default nested function count is 100, see: http://stackoverflow.com/questions/8656089/solution-for-fatal-error-maximum-function-nesting-level-of-100-reached-abor
|
||||||
|
#ifndef SEH_CAPACITY
|
||||||
|
# define SEH_CAPACITY 100
|
||||||
|
#endif // SEH_CAPACITY
|
||||||
|
|
||||||
|
enum { seh_capacity = SEH_CAPACITY };
|
||||||
|
|
||||||
|
typedef unsigned long seh_dword_t; // DWORD in <windows.h>
|
||||||
|
|
||||||
|
// 12/13/2013 jichi
|
||||||
|
// The list implementation is not thread-safe
|
||||||
|
extern seh_dword_t seh_esp[seh_capacity], // LPVOID, current stack
|
||||||
|
seh_eip[seh_capacity], // LPVOID, current IP address
|
||||||
|
seh_eh[seh_capacity]; // EXCEPTION_ROUTINE, current exception handler function address
|
||||||
|
extern seh_dword_t seh_count; // current number of exception handlers
|
||||||
|
extern seh_dword_t seh_handler; //extern PEXCEPTION_ROUTINE seh_handler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Push SEH handler
|
||||||
|
* @param _label exception recover label which should be the same as seh_pop_
|
||||||
|
* @param _eh EXCEPTION_ROUTINE or 0
|
||||||
|
* @param _r1 scalar register name, such as eax
|
||||||
|
* @param _r2 counter register name, such as ecx
|
||||||
|
*
|
||||||
|
* Note: __asm prefix is needed to allow inlining macro
|
||||||
|
* I didn't pushad and popad which seems to be not needed
|
||||||
|
*
|
||||||
|
* For SEH, see:
|
||||||
|
* http://www.codeproject.com/Articles/82701/Win32-Exceptions-OS-Level-Point-of-View
|
||||||
|
* http://sploitfun.blogspot.com/2012/08/seh-exploit-part1.html
|
||||||
|
* http://sploitfun.blogspot.com/2012/08/seh-exploit-part2.html
|
||||||
|
*
|
||||||
|
* fs:0x0 on Windows is the pointer to ExceptionList
|
||||||
|
* http://stackoverflow.com/questions/4657661/what-lies-at-fs0x0-on-windows
|
||||||
|
*
|
||||||
|
* EPB and ESP
|
||||||
|
* http://stackoverflow.com/questions/1395591/what-is-exactly-the-base-pointer-and-stack-pointer-to-what-do-they-point
|
||||||
|
*/
|
||||||
|
#define seh_push_(_label, _eh, _r1, _r2) \
|
||||||
|
{ \
|
||||||
|
__asm mov _r1, _eh /* move new handler address */ \
|
||||||
|
__asm mov _r2, seh_count /* get current seh counter */ \
|
||||||
|
__asm mov dword ptr seh_eh[_r2*4], _r1 /* set recover exception hander */ \
|
||||||
|
__asm mov _r1, _label /* move jump label address */ \
|
||||||
|
__asm mov dword ptr seh_eip[_r2*4], _r1 /* set recover eip as the jump label */ \
|
||||||
|
__asm push seh_handler /* push new safe seh handler */ \
|
||||||
|
__asm push fs:[0] /* push old fs:0 */ \
|
||||||
|
__asm mov dword ptr seh_esp[_r2*4], esp /* safe current stack address */ \
|
||||||
|
__asm mov fs:[0], esp /* change fs:0 to the current stack */ \
|
||||||
|
__asm inc seh_count /* increase number of seh */ \
|
||||||
|
}
|
||||||
|
//TODO: get sizeof dword instead of hardcode 4
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restore old SEH handler
|
||||||
|
* @param _label exception recover label which should be the same as seh_push_
|
||||||
|
*/
|
||||||
|
#define seh_pop_(_label) \
|
||||||
|
{ \
|
||||||
|
__asm _label: /* the exception recover label */ \
|
||||||
|
__asm pop dword ptr fs:[0] /* restore old fs:0 */ \
|
||||||
|
__asm add esp, 4 /* pop seh_handler */ \
|
||||||
|
__asm dec seh_count /* decrease number of seh */ \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define seh_pop() seh_pop_(seh_exit)
|
||||||
|
#define seh_push() seh_push_(seh_exit, 0, eax, ecx) // use ecx as counter better than ebx
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param _eh EXCEPTION_ROUTINE or 0
|
||||||
|
*/
|
||||||
|
#define seh_push_eh(_eh) seh_push_(seh_exit, _eh, eax, ecx)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrap the code block with SEH handler
|
||||||
|
* @param* any code block. The colon for the last expression is optional.
|
||||||
|
*/
|
||||||
|
#define seh_with(...) \
|
||||||
|
{ \
|
||||||
|
seh_push() \
|
||||||
|
__VA_ARGS__ \
|
||||||
|
; \
|
||||||
|
seh_pop() \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrap the code block with SEH handler
|
||||||
|
* @param _eh EXCEPTION_ROUTINE or 0
|
||||||
|
* @param* any code block. The colon for the last expression is optional.
|
||||||
|
*/
|
||||||
|
#define seh_with_eh(_eh, ...) \
|
||||||
|
{ \
|
||||||
|
seh_push_eh(_eh) \
|
||||||
|
__VA_ARGS__ \
|
||||||
|
; \
|
||||||
|
seh_pop() \
|
||||||
|
}
|
||||||
|
|
||||||
|
// EOF
|
||||||
|
|
||||||
|
//#define seh_push_front() \
|
||||||
|
// { \
|
||||||
|
// __asm mov eax, seh_exit \
|
||||||
|
// __asm mov seh_eip, eax \
|
||||||
|
// __asm push seh_handler \
|
||||||
|
// __asm push fs:[0] \
|
||||||
|
// __asm mov seh_esp, esp \
|
||||||
|
// __asm mov fs:[0], esp \
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//#define seh_pop_front() \
|
||||||
|
// { \
|
||||||
|
// __asm seh_exit: \
|
||||||
|
// __asm mov eax, [esp] \
|
||||||
|
// __asm mov fs:[0], eax \
|
||||||
|
// __asm add esp, 8 \
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//#define seh_push_back() \
|
||||||
|
// { \
|
||||||
|
// __asm mov eax, seh_exit \
|
||||||
|
// __asm mov ecx, seh_capacity - 1 \
|
||||||
|
// __asm mov DWORD PTR seh_eip[ecx*4], eax \
|
||||||
|
// __asm push seh_handler \
|
||||||
|
// __asm push fs:[0] \
|
||||||
|
// __asm mov DWORD PTR seh_esp[ecx*4], esp \
|
||||||
|
// __asm mov fs:[0], esp \
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//#define seh_pop_back() \
|
||||||
|
// { \
|
||||||
|
// __asm seh_exit: \
|
||||||
|
// __asm mov eax, [esp] \
|
||||||
|
// __asm mov fs:[0], eax \
|
||||||
|
// __asm add esp, 8 \
|
||||||
|
// }
|
10
vnr/winseh/winseh_safe.cc
Normal file
10
vnr/winseh/winseh_safe.cc
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// winseh_safe.cc
|
||||||
|
// 12/13/2013 jichi
|
||||||
|
// See: http://stackoverflow.com/questions/12019689/custom-seh-handler-with-safeseh
|
||||||
|
|
||||||
|
#include "winseh/winseh.h"
|
||||||
|
|
||||||
|
extern "C" int __stdcall _seh_asm_handler();
|
||||||
|
seh_dword_t seh_handler = reinterpret_cast<seh_dword_t>(_seh_asm_handler);
|
||||||
|
|
||||||
|
// EOF
|
29
vnr/winseh/winseh_safe.pri
Normal file
29
vnr/winseh/winseh_safe.pri
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# winseh_safe.pri
|
||||||
|
# 12/13/2013 jichi
|
||||||
|
#
|
||||||
|
# Need link with with SEH assembly
|
||||||
|
# See: http://stackoverflow.com/questions/12019689/custom-seh-handler-with-safeseh
|
||||||
|
# See: http://stackoverflow.com/questions/19722308/exception-handler-not-called-in-c
|
||||||
|
win32 {
|
||||||
|
#include(../../../config.pri)
|
||||||
|
|
||||||
|
# Disable buffer security check: http://msdn.microsoft.com/en-us/library/8dbf701c.aspx
|
||||||
|
#QMAKE_CXXFLAGS += /GS-
|
||||||
|
|
||||||
|
LIBS += safeseh.obj # compiled from safeseh.asm using ml -safeseh
|
||||||
|
|
||||||
|
DEFINES += WITH_LIB_WINSEH
|
||||||
|
|
||||||
|
DEPENDPATH += $$PWD
|
||||||
|
|
||||||
|
HEADERS += $$PWD/winseh.h
|
||||||
|
SOURCES += \
|
||||||
|
$$PWD/winseh.cc \
|
||||||
|
$$PWD/winseh_safe.cc
|
||||||
|
|
||||||
|
OTHER_FILES += \
|
||||||
|
$$PWD/safeseh.asm \
|
||||||
|
$$PWD/Makefile
|
||||||
|
}
|
||||||
|
|
||||||
|
# EOF
|
11
vnr/winseh/winseh_unsafe.cc
Normal file
11
vnr/winseh/winseh_unsafe.cc
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// winseh_unsafe.cc
|
||||||
|
// 12/13/2013 jichi
|
||||||
|
// See: http://stackoverflow.com/questions/19722308/exception-handler-not-called-in-c
|
||||||
|
|
||||||
|
#include "winseh/winseh.h"
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
extern "C" EXCEPTION_DISPOSITION _seh_handler(PEXCEPTION_RECORD, PVOID, PCONTEXT, PVOID);
|
||||||
|
seh_dword_t seh_handler = reinterpret_cast<seh_dword_t>(_seh_handler);
|
||||||
|
|
||||||
|
// EOF
|
Loading…
x
Reference in New Issue
Block a user