X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FcreaSystem.cxx;h=7966999a85a09bd20a10321cda879a546be4cd73;hb=51861648ce577c3a084dd4365017976db06c031d;hp=69293a982369586e718dd76c6bfe73a4062a7ea4;hpb=e75e59008c595bb6abcc4595edd3cd352a609e89;p=crea.git diff --git a/src/creaSystem.cxx b/src/creaSystem.cxx index 69293a9..7966999 100644 --- a/src/creaSystem.cxx +++ b/src/creaSystem.cxx @@ -1,12 +1,41 @@ +/* +# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Santé) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ +*/ + #include "creaSystem.h" #include #include #include -#ifdef WIN32 -#include /* GetModuleFileName */ -#include -#endif /* WIN32 */ + +#ifdef LINUX + #include + #include + #include +#endif #ifdef __APPLE__ /* assume this is OSX */ #include @@ -44,6 +73,34 @@ namespace crea } #endif + + +#ifdef _WIN32 + +//===================================================================================== +/* http://forums.codeguru.com/showthread.php?336106-WCHAR*-to-CHAR* +|| ::DESCRIPTION:: +|| This function will convert a WCHAR string to a CHAR string. +|| +|| Param 1 :: Pointer to a buffer that will contain the converted string. Ensure this +|| buffer is large enough; if not, buffer overrun errors will occur. +|| Param 2 :: Constant pointer to a source WCHAR string to be converted to CHAR +*/ +void System::wtoc(const WCHAR* Source,CHAR* Dest) +{ + int i = 0; + while(Source[i] != '\0') + { + Dest[i] = (CHAR)Source[i]; + ++i; + } // while +} + + +#endif + + + int System::GetAppPath(char *pname, size_t pathsize) { #ifdef LINUX @@ -63,7 +120,13 @@ int System::GetAppPath(char *pname, size_t pathsize) #endif /* LINUX */ #ifdef WIN32 - long result = GetModuleFileName(NULL, pname, pathsize); + +//2018-07-06 mingw64 + wchar_t pname2[512]; + long result = GetModuleFileName(NULL, pname2, pathsize); + crea::System::wtoc(pname2,pname); +// long result = GetModuleFileName(NULL, pname, pathsize); + if (result > 0) { /* fix up the dir slashes... */ @@ -83,7 +146,7 @@ int System::GetAppPath(char *pname, size_t pathsize) } } - if ((access(pname, 0) == 0)) + if ((_access(pname, 0) == 0)) return 0; /* file exists, return OK */ /*else name doesn't seem to exist, return FAIL (falls through) */ @@ -170,9 +233,18 @@ std::string System::GetDllAppPath(std::string &nomdll){ std::string path = "."; #ifdef WIN32 char currentPath[_MAX_PATH]; - HMODULE hand = GetModuleHandle(nomdll.c_str()); - GetModuleFileName(hand, currentPath, _MAX_PATH); + +//2018-07-06 mingw64 + wchar_t nomdll2[512]; + mbstowcs(nomdll2,nomdll.c_str(),strlen(nomdll.c_str())+1); + HMODULE hand = GetModuleHandle(nomdll2); +// HMODULE hand = GetModuleHandle(nomdll.c_str()); +//2018-07-06 mingw64 + wchar_t currentPath2[512]; + GetModuleFileName(hand, currentPath2, _MAX_PATH); + crea::System::wtoc(currentPath2,currentPath); +// GetModuleFileName(hand, currentPath, _MAX_PATH); path = currentPath; path = path.substr(0,path.find_last_of("\\")); @@ -180,6 +252,29 @@ std::string System::GetDllAppPath(std::string &nomdll){ return path; } + +std::string System::GetDllAppPath(const char *nomdll){ + std::string path = "."; +#ifdef WIN32 + char currentPath[_MAX_PATH]; + +//2018-07-06 mingw64 + wchar_t nomdll2[512]; + mbstowcs(nomdll2,nomdll,strlen(nomdll)+1); + HMODULE hand = GetModuleHandle(nomdll2); +// HMODULE hand = GetModuleHandle(nomdll); + +//2018-07-06 mingw64 + wchar_t currentPath2[512]; + GetModuleFileName(hand, currentPath2, _MAX_PATH); + crea::System::wtoc(currentPath2,currentPath); +// GetModuleFileName(hand, currentPath, _MAX_PATH); + path = currentPath; + path = path.substr(0,path.find_last_of("\\")); +#endif + return path; +} + #if defined(_WIN32) #define CREACONTOUR_VALID_FILE_SEPARATOR_CHAR '\\' #else @@ -187,10 +282,12 @@ std::string System::GetDllAppPath(std::string &nomdll){ #endif //========================================================================= -std::string System::GetExecutablePath(){ +std::string System::GetExecutablePath() +{ char name[PATH_MAX]; //EED int err = get_app_path(name, PATH_MAX); int err = System::GetAppPath(name,PATH_MAX); +printf("EED creaSystem::GetExecutablePath %s \n",name); if (err) { printf("Could not determine current executable path ? "); @@ -204,5 +301,44 @@ std::string System::GetExecutablePath(){ } return name; } + + void System::createDirectory(const char* directorypath){ + #ifdef WIN32 + +//2018-07-06 mingw64 + wchar_t directorypath2[512]; + mbstowcs(directorypath2,directorypath,strlen(directorypath)+1); + if (CreateDirectory(directorypath2, NULL) == ERROR_ALREADY_EXISTS) +// if (CreateDirectory(directorypath, NULL) == ERROR_ALREADY_EXISTS) + { + std::cout<<"directory already exists "<