From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- miranda-wine/src/modules/utils/path.c | 83 +++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 miranda-wine/src/modules/utils/path.c (limited to 'miranda-wine/src/modules/utils/path.c') diff --git a/miranda-wine/src/modules/utils/path.c b/miranda-wine/src/modules/utils/path.c new file mode 100644 index 0000000..ba7caee --- /dev/null +++ b/miranda-wine/src/modules/utils/path.c @@ -0,0 +1,83 @@ +/* + +Miranda IM: the free IM client for Microsoft* Windows* + +Copyright 2000-2006 Miranda ICQ/IM project, +all portions of this codebase are copyrighted to the people +listed in contributors.txt. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ +#include "commonheaders.h" + +static char szMirandaPath[MAX_PATH]; + +static int pathIsAbsolute(char *path) +{ + if (!path||!strlen(path)>2) return 0; + if ((path[1]==':'&&path[2]=='\\')||(path[0]=='\\'&&path[1]=='\\')) return 1; + return 0; +} + +static int pathToRelative(WPARAM wParam, LPARAM lParam) +{ + char *pSrc = (char*)wParam; + char *pOut = (char*)lParam; + if (!pSrc||!strlen(pSrc)||strlen(pSrc)>MAX_PATH) return 0; + if (!pathIsAbsolute(pSrc)) { + mir_snprintf(pOut, MAX_PATH, "%s", pSrc); + return strlen(pOut); + } + else { + char szTmp[MAX_PATH]; + + mir_snprintf(szTmp, SIZEOF(szTmp), "%s", pSrc); + _strlwr(szTmp); + if (strstr(szTmp, szMirandaPath)) { + mir_snprintf(pOut, MAX_PATH, "%s", pSrc+strlen(szMirandaPath)); + return strlen(pOut); + } + else { + mir_snprintf(pOut, MAX_PATH, "%s", pSrc); + return strlen(pOut); + } + } +} + +static int pathToAbsolute(WPARAM wParam, LPARAM lParam) { + char *pSrc = (char*)wParam; + char *pOut = (char*)lParam; + if (!pSrc||!strlen(pSrc)||strlen(pSrc)>MAX_PATH) return 0; + if (pathIsAbsolute(pSrc)||!isalnum(pSrc[0])) { + mir_snprintf(pOut, MAX_PATH, "%s", pSrc); + return strlen(pOut); + } + else { + mir_snprintf(pOut, MAX_PATH, "%s%s", szMirandaPath, pSrc); + return strlen(pOut); + } +} + +int InitPathUtils(void) +{ + char *p = 0; + GetModuleFileNameA(GetModuleHandle(NULL), szMirandaPath, SIZEOF(szMirandaPath)); + p=strrchr(szMirandaPath,'\\'); + if (p&&p+1) *(p+1)=0; + _strlwr(szMirandaPath); + CreateServiceFunction(MS_UTILS_PATHTORELATIVE, pathToRelative); + CreateServiceFunction(MS_UTILS_PATHTOABSOLUTE, pathToAbsolute); + return 0; +} -- cgit v1.2.3