From c0bc9a2a67015b1cad8d87dac5b6e111843f086b Mon Sep 17 00:00:00 2001 From: Peter Honeder Date: Thu, 5 Mar 2015 14:58:25 -0800 Subject: [PATCH] initial commit --- .gitmodules | 3 + ext-src/gtest | 1 + src/CMakeLists.txt | 17 + src/impl/getcurrentprocessorid.cpp | 9 + src/impl/getcurrentprocessorid.h | 10 + src/impl/pal.h | 587 +++++++++++++++++++++++++ src/main.cpp | 7 + src/tests/test-getcurrentprocessid.cpp | 16 + 8 files changed, 650 insertions(+) create mode 100644 .gitmodules create mode 160000 ext-src/gtest create mode 100644 src/CMakeLists.txt create mode 100644 src/impl/getcurrentprocessorid.cpp create mode 100644 src/impl/getcurrentprocessorid.h create mode 100644 src/impl/pal.h create mode 100644 src/main.cpp create mode 100644 src/tests/test-getcurrentprocessid.cpp diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..63ba77f861 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ext-src/gtest"] + path = ext-src/gtest + url = https://msostc.visualstudio.com/DefaultCollection/PS/_git/ext-gtest diff --git a/ext-src/gtest b/ext-src/gtest new file mode 160000 index 0000000000..2196edcdb7 --- /dev/null +++ b/ext-src/gtest @@ -0,0 +1 @@ +Subproject commit 2196edcdb71dc8ff99f693e9e43332c143fe59d3 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000..4355f98d04 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 2.8.4) +project(monad_native) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + +#include gtest +include_directories(../ext-src/gtest/fused-src impl) + +set(SOURCE_FILES main.cpp tests/test-getcurrentprocessid.cpp impl/getcurrentprocessorid.cpp ../ext-src/gtest/fused-src/gtest/gtest-all.cc) +add_executable(monad_native ${SOURCE_FILES}) + +# add pthread +find_package(Threads) +target_link_libraries(monad_native ${CMAKE_THREAD_LIBS_INIT}) + + + diff --git a/src/impl/getcurrentprocessorid.cpp b/src/impl/getcurrentprocessorid.cpp new file mode 100644 index 0000000000..409f2c258f --- /dev/null +++ b/src/impl/getcurrentprocessorid.cpp @@ -0,0 +1,9 @@ +#include "getcurrentprocessorid.h" +#include + +HANDLE GetCurrentProcessId() +{ + pid_t pid = getpid(); + return reinterpret_cast(pid); +} + diff --git a/src/impl/getcurrentprocessorid.h b/src/impl/getcurrentprocessorid.h new file mode 100644 index 0000000000..fa3f35534e --- /dev/null +++ b/src/impl/getcurrentprocessorid.h @@ -0,0 +1,10 @@ +#pragma once + +#include "pal.h" + +PAL_BEGIN_EXTERNC + +HANDLE GetCurrentProcessId(); + +PAL_END_EXTERNC + diff --git a/src/impl/pal.h b/src/impl/pal.h new file mode 100644 index 0000000000..659afd4f61 --- /dev/null +++ b/src/impl/pal.h @@ -0,0 +1,587 @@ +/* +**============================================================================== +** +** Open Management Infrastructure (OMI) +** +** Copyright (c) Microsoft Corporation +** +** Licensed under the Apache License, Version 2.0 (the "License"); you may not +** use this file except in compliance with the License. You may obtain a copy +** of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +** MERCHANTABLITY OR NON-INFRINGEMENT. +** +** See the Apache 2 License for the specific language governing permissions +** and limitations under the License. +** +**============================================================================== +*/ + +#pragma once + +#include +#include +#include +#include +#include +#include + +#ifndef NAME_MAX +# define NAME_MAX 255 +#endif + +/* +**============================================================================== +** +** Windows-specific types. Defined here for PAL on Non-Windows platforms. +** +**============================================================================== +*/ + +#ifdef _MSC_VER + #ifndef WIN32_FROM_HRESULT + #define WIN32_FROM_HRESULT(hr) (HRESULT_FACILITY(hr) == FACILITY_WIN32 ? HRESULT_CODE(hr) : hr) + #endif +#else + #define WIN32_FROM_HRESULT(hr) hr + #define HRESULT_FROM_WIN32(error) error + typedef unsigned long DWORD, *LPDWORD; + typedef int BOOL; + typedef unsigned long HRESULT; + typedef const wchar_t *PCWSTR; + typedef wchar_t *PWSTR; + typedef const char *PCSTR; + typedef char *PSTR; + typedef void *PVOID; + typedef PVOID HANDLE; + #define NO_ERROR 0 + #define INFINITE 0xFFFFFFFF + #define WINAPI + #define S_OK 0 + #define ERROR_GEN_FAILURE 31 + #define TRUE 1 + #define FALSE 0 + #define ERROR_INVALID_PARAMETER 87 + #define ERROR_OUTOFMEMORY 14 + #define MAX_PATH 0x00000104 + typedef unsigned long long uint64; +#endif + +/* +**============================================================================== +** +** __FUNCTION__ +** +**============================================================================== +*/ + +#if !defined(CONFIG_HAVE_FUNCTION_MACRO) +# if !defined(_MSC_VER) && !defined(__FUNCTION__) +# define __FUNCTION__ "" +# endif +#endif + +/* +**============================================================================== +** +** PAL_32BIT +** PAL_64BIT +** +**============================================================================== +*/ +#if defined(__GNUC__) +# if defined(__i386__) +# define PAL_32BIT +# elif defined(__x86_64__) +# define PAL_64BIT +# elif defined(__ppc__) +# define PAL_32BIT +# elif defined(__ppc64__) +# define PAL_64BIT +# elif ((ULONG_MAX) == (UINT_MAX) && (ULONG_MAX == 0xFFFFFFFF)) +# define PAL_32BIT +# else +# define PAL_64BIT +# endif +#elif defined(_MSC_VER) +# if defined(_WIN64) +# define PAL_64BIT +# else +# define PAL_32BIT +# endif +#elif ((ULONG_MAX) == (UINT_MAX) && (ULONG_MAX == 0xFFFFFFFF)) +# define PAL_32BIT +#else +# define PAL_64BIT +#endif + +/* +**============================================================================== +** +** PAL_CALL macro +** +**============================================================================== +*/ +#ifdef _MSC_VER +# define PAL_CALL __stdcall +#else +# define PAL_CALL +#endif + +/* +**============================================================================== +** +** PAL_EXPORT_API, PAL_IMPORT_API macros +** +**============================================================================== +*/ + +#if defined(_MSC_VER) +# define PAL_EXPORT_API __declspec(dllexport) +# define PAL_IMPORT_API __declspec(dllimport) +#elif defined(__GNUC__) +# define PAL_EXPORT_API __attribute__((visibility("default"))) +# define PAL_IMPORT_API /* empty */ +#elif defined(sun) +# define PAL_EXPORT_API __global +# define PAL_IMPORT_API /* empty */ +#else +# define PAL_EXPORT_API /* empty */ +# define PAL_IMPORT_API /* empty */ +#endif + +/* +**============================================================================== +** +** PAL_BEGIN_EXTERNC +** PAL_END_EXTERNC +** +**============================================================================== +*/ + +#if defined(__cplusplus) +# define PAL_BEGIN_EXTERNC extern "C" { +# define PAL_END_EXTERNC } +#else +# define PAL_BEGIN_EXTERNC +# define PAL_END_EXTERNC +#endif + +/* +**============================================================================== +** +** PAL_EXTERN_C +** +**============================================================================== +*/ +#ifdef __cplusplus +# define PAL_EXTERN_C extern "C" +#else +# define PAL_EXTERN_C extern +#endif /* __cplusplus */ + +/* +**============================================================================== +** +** PAL_INLINE macro +** +**============================================================================== +*/ + +#if defined(_MSC_VER) +# define PAL_INLINE static __inline +#elif defined(__GNUC__) +# define PAL_INLINE static __inline +#elif defined(sun) +# define PAL_INLINE static inline +#elif defined(__PPC) +# define PAL_INLINE __inline__ +#else +# define PAL_INLINE static __inline +#endif + +/* +**============================================================================== +** +** PAL string +** +**============================================================================== +*/ + +#if defined(CONFIG_ENABLE_WCHAR) +typedef wchar_t PAL_Char; +#else +typedef char PAL_Char; +#endif + +typedef PAL_Char TChar; + +/* +**============================================================================== +** +** PAL_T() +** +**============================================================================== +*/ + +#if defined(CONFIG_ENABLE_WCHAR) +# define __PAL_T(STR) L ## STR +# define PAL_T(STR) __PAL_T(STR) +#else +# define PAL_T(STR) STR +#endif + +/* +**============================================================================== +** +** PAL_UNUSED +** +**============================================================================== +*/ + +#define PAL_UNUSED(X) ((void)X) + +/* +**============================================================================== +** +** PAL_HAVE_POSIX +** +**============================================================================== +*/ + +#if defined(linux) || defined(sun) || defined(hpux) || defined(aix) +# define PAL_HAVE_POSIX +#endif + +/* +**============================================================================== +** +** PAL_HAVE_PTHREADS +** +**============================================================================== +*/ + +#if defined(linux) | defined(sun) | defined(hpux) | defined(aix) +# define PAL_HAVE_PTHREADS +#endif + +/* +**============================================================================== +** +** Basic types +** +**============================================================================== +*/ + +typedef unsigned char PAL_Uint8; +#define PAL_UINT8_MAX (UCHAR_MAX) + +typedef signed char PAL_Sint8; +#define PAL_SINT8_MIN (SCHAR_MIN) +#define PAL_SINT8_MAX (SCHAR_MAX) + +typedef unsigned short PAL_Uint16; +#define PAL_UINT16_MAX (USHRT_MAX) + +typedef signed short PAL_Sint16; +#define PAL_SINT16_MIN (SHRT_MIN) +#define PAL_SINT16_MAX (SHRT_MAX) + +typedef unsigned int PAL_Uint32; +#define PAL_UINT32_MAX (UINT_MAX) + +typedef signed int PAL_Sint32; +#define PAL_SINT32_MIN (INT_MIN) +#define PAL_SINT32_MAX (INT_MAX) + +#if defined(_MSC_VER) +typedef unsigned __int64 PAL_Uint64; +typedef signed __int64 PAL_Sint64; +#else +typedef unsigned long long PAL_Uint64; +typedef signed long long PAL_Sint64; +#endif +#define PAL_UINT64_MIN ((PAL_Uint64) 0ULL) +#define PAL_UINT64_MAX ((PAL_Uint64) 18446744073709551615ULL) +#define PAL_SINT64_MIN ((PAL_Sint64) (-9223372036854775807LL - 1LL)) +#define PAL_SINT64_MAX ((PAL_Sint64) 9223372036854775807LL ) + +typedef unsigned char PAL_Boolean; + +#define PAL_TRUE ((PAL_Boolean)1) +#define PAL_FALSE ((PAL_Boolean)0) + +/* +**============================================================================== +** +** Function calling conventions +** +**============================================================================== +*/ + +#ifdef _MSC_VER +# define PAL_CDECLAPI __cdecl +#else +# define PAL_CDECLAPI +#endif + +#define ATEXIT_API PAL_CDECLAPI + +/* +**============================================================================== +** +** SAL Notation for non-Windows platforms +** +**============================================================================== +*/ + +#if !defined(_MSC_VER) + +# ifndef _In_ +# define _In_ +# endif + +# ifndef _Out_ +# define _Out_ +# endif + +# ifndef _Inout_ +# define _Inout_ +# endif + +# ifndef _Return_type_success_ +# define _Return_type_success_(x) +# endif + +# ifndef _Acquires_lock_ +# define _Acquires_lock_(x) +# endif + +# ifndef _Releases_lock_ +# define _Releases_lock_(x) +# endif + +# ifndef _In_z_ +# define _In_z_ +# endif + +# ifndef _Post_z_ +# define _Post_z_ +# endif + +# ifndef _Out_writes_ +# define _Out_writes_(size) +# endif + +# ifndef _Out_writes_z_ +# define _Out_writes_z_(size) +# endif + +# ifndef _Null_terminated_ +# define _Null_terminated_ +# endif + +# ifndef _Use_decl_annotations_ +# define _Use_decl_annotations_ +# endif + +# ifndef _Out_opt_ +# define _Out_opt_ +# endif + +# ifndef _Deref_post_z_ +# define _Deref_post_z_ +# endif + +# ifndef _Inout_updates_z_ +# define _Inout_updates_z_(count) +# endif + +# ifndef _Inout_opt_z_ +# define _Inout_opt_z_ +# endif + +# ifndef _Deref_prepost_opt_z_ +# define _Deref_prepost_opt_z_ +# endif + +# ifndef _In_opt_ +# define _In_opt_ +# endif + +# ifndef _In_opt_z_ +# define _In_opt_z_ +# endif + +# ifndef _Ret_maybenull_ +# define _Ret_maybenull_ +# endif + +# ifndef _Check_return_ +# define _Check_return_ +# endif + +# ifndef _Must_inspect_result_ +# define _Must_inspect_result_ +# endif + +# ifndef _Frees_ptr_opt_ +# define _Frees_ptr_opt_ +# endif + +# ifndef _Frees_ptr_ +# define _Frees_ptr_ +# endif + +# ifndef _Const_ +# define _Const_ +# endif + +# ifndef _Post_writable_byte_size +# define _Post_writable_byte_size(size) +# endif + +# ifndef _Analysis_assume_ +# define _Analysis_assume_(expr) +# endif + +# ifndef _Always_ +# define _Always_(expr) +# endif + +# ifndef _Outptr_ +# define _Outptr_ +# endif + +# ifndef _Outptr_result_buffer_ +# define _Outptr_result_buffer_(size) +# endif + +# ifndef _Outptr_result_nullonfailure_ +# define _Outptr_result_nullonfailure_ +# endif + +# ifndef _Maybenull_ +# define _Maybenull_ +# endif + +# ifndef _Notnull_ +# define _Notnull_ +# endif + +# ifndef _Valid_ +# define _Valid_ +# endif + +# ifndef _Analysis_noreturn_ +# define _Analysis_noreturn_ +# endif + +# ifndef _Ret_writes_maybenull_z_ +# define _Ret_writes_maybenull_z_(count) +# endif + +# ifndef _String_length_ +# define _String_length_(str) +# endif + +# ifndef _Success_ +# define _Success_ +# endif + +# ifndef _Field_range_ +# define _Field_range_(min, max) +# endif + +# ifndef _In_range_ +# define _In_range_(min, max) +# endif + +# ifndef _Field_size_ +# define _Field_size_(count) +# endif + +# ifndef _Field_size_opt_ +# define _Field_size_opt_(count) +# endif + +# ifndef _Field_size_full_opt_ +# define _Field_size_full_opt_(count) +# endif + +# ifndef _Field_size_bytes_opt_ +# define _Field_size_bytes_opt_(size) +# endif + +# ifndef _Readable_elements_ +# define _Readable_elements_(count) +# endif + +# ifndef _Writable_elements_ +# define _Writable_elements_(count) +# endif + +# ifndef _Struct_size_bytes_ +# define _Struct_size_bytes_(size) +# endif + +# ifndef _At_ +# define _At_(target, annotation) +# endif + +# ifndef _Pre_satisfies_ +# define _Pre_satisfies_(expr) +# endif + +# ifndef _On_failure_ +# define _On_failure_(expr) +# endif + +# ifndef _In_bytecount_ +# define _In_bytecount_(size) +# endif + +# ifndef _Out_writes_bytes_to_opt_ +# define _Out_writes_bytes_to_opt_(buffLen, bufferNeeded) +# endif + +# ifndef _When_ +# define _When_(expr, annotation) +# endif + +# ifndef _Analysis_assume_nullterminated_ +# define _Analysis_assume_nullterminated_(expr) +# endif + + +#endif /* !defined(_MSC_VER) */ + +/* +**============================================================================== +** +** PAL_MAX_PATH_SIZE +** +**============================================================================== +*/ + +#define PAL_MAX_PATH_SIZE 1024 + +/* +**============================================================================== +** +** PAL_COUNT +** +**============================================================================== +*/ + +#ifdef _MSC_VER +# define PAL_COUNT(ARR) _countof(ARR) +#else +# define PAL_COUNT(ARR) (sizeof(ARR) / sizeof(ARR[0])) +#endif + diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000000..e59bea0572 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,7 @@ +#include + +int main(int argc, char** argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file diff --git a/src/tests/test-getcurrentprocessid.cpp b/src/tests/test-getcurrentprocessid.cpp new file mode 100644 index 0000000000..9803b6612c --- /dev/null +++ b/src/tests/test-getcurrentprocessid.cpp @@ -0,0 +1,16 @@ +#include +#include "getcurrentprocessorid.h" + +// This is a very simple test case to show how tests can be written +TEST(GetCurrentProcessId,simple) +{ + const HANDLE currentProcessId = GetCurrentProcessId(); + const pid_t pid = getpid(); + + // first make sure that on this platform those types are of the same size + ASSERT_TRUE(sizeof(HANDLE) >= sizeof(pid_t)); + + // now compare the actual values + ASSERT_EQ(currentProcessId,reinterpret_cast(pid)); +} +