X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c801d85f158c4cba50b588807daabdcbd0ed3853..bbcdf8bc7ca806d8278c7cb6d09d5590378b67d8:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index 0c3cb57f31..7934074852 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -40,10 +40,12 @@ #include #include +#ifdef __UNIX__ #include #include +#endif -#ifdef __WINDOWS__ +#ifdef __WXMSW__ #ifndef __GNUWIN32__ #include #include @@ -67,7 +69,7 @@ #include #endif -#ifdef __WINDOWS__ +#ifdef __WXMSW__ #include "windows.h" #endif @@ -88,7 +90,7 @@ void wxPathList::Add (const wxString& path) void wxPathList::AddEnvList (const wxString& envVariable) { static const char PATH_TOKS[] = -#ifdef __WINDOWS__ +#ifdef __WXMSW__ " ;"; // Don't seperate with colon in DOS (used for drive) #else " :;"; @@ -133,7 +135,7 @@ bool wxPathList::Member (const wxString& path) { wxString path2((char *) node->Data ()); if ( -#if defined(__WINDOWS__) || defined(__VMS__) +#if defined(__WXMSW__) || defined(__VMS__) // Case INDEPENDENT path.CompareTo (path2, wxString::ignoreCase) == 0 #else @@ -164,7 +166,7 @@ wxString wxPathList::FindValidPath (const wxString& file) if (ch != '\\' && ch != '/') strcat (wxBuffer, "/"); strcat (wxBuffer, filename); -#ifdef __WINDOWS__ +#ifdef __WXMSW__ Unix2DosFilename (wxBuffer); #endif if (wxFileExists (wxBuffer)) @@ -191,7 +193,7 @@ wxString wxPathList::FindAbsoluteValidPath (const wxString& file) lastCh = buf[len-1]; if (lastCh != '/' && lastCh != '\\') { -#ifdef __WINDOWS__ +#ifdef __WXMSW__ strcat(buf, "\\"); #else strcat(buf, "/"); @@ -234,7 +236,7 @@ wxIsAbsolutePath (const wxString& filename) #ifdef __VMS__ || (filename[0] == '[' && filename[1] != '.') #endif -#ifdef __WINDOWS__ +#ifdef __WXMSW__ /* MSDOS */ || filename[0] == '\\' || (isalpha (filename[0]) && filename[1] == ':') #endif @@ -265,10 +267,25 @@ void wxStripExtension(char *buffer) } } +void wxStripExtension(wxString& buffer) +{ + size_t len = buffer.Length(); + size_t i = len-1; + while (i > 0) + { + if (buffer.GetChar(i) == '.') + { + buffer = buffer.Left(i); + break; + } + i --; + } +} + // Destructive removal of /./ and /../ stuff char *wxRealPath (char *path) { -#ifdef __WINDOWS__ +#ifdef __WXMSW__ static const char SEP = '\\'; Unix2DosFilename(path); #else @@ -298,7 +315,7 @@ char *wxRealPath (char *path) path[0] = SEP; path[1] = '\0'; } -#ifdef __WINDOWS__ +#ifdef __WXMSW__ /* Check that path[2] is NULL! */ else if (path[1] == ':' && !path[2]) { @@ -328,7 +345,7 @@ char *wxCopyAbsolutePath(const wxString& filename) buf[0] = '\0'; wxGetWorkingDirectory(buf, sizeof(buf)/sizeof(char)); char ch = buf[strlen(buf) - 1]; -#ifdef __WINDOWS__ +#ifdef __WXMSW__ if (ch != '\\' && ch != '/') strcat(buf, "\\"); #else @@ -379,7 +396,7 @@ char *wxExpandPath(char *buf, const char *name) trimchars[2] = '\t'; trimchars[3] = 0; -#ifdef __WINDOWS__ +#ifdef __WXMSW__ const char SEP = '\\'; #else const char SEP = '/'; @@ -400,7 +417,7 @@ char *wxExpandPath(char *buf, const char *name) s = nm; d = lnm; -#ifdef __WINDOWS__ +#ifdef __WXMSW__ q = FALSE; #else q = nm[0] == '\\' && nm[1] == '~'; @@ -408,7 +425,7 @@ char *wxExpandPath(char *buf, const char *name) /* Expand inline environment variables */ while ((*d++ = *s)) { -#ifndef __WINDOWS__ +#ifndef __WXMSW__ if (*s == '\\') { if ((*(d - 1) = *++s)) { s++; @@ -417,7 +434,7 @@ char *wxExpandPath(char *buf, const char *name) break; } else #endif -#ifdef __WINDOWS__ +#ifdef __WXMSW__ if (*s++ == '$' && (*s == '{' || *s == ')')) #else if (*s++ == '$') @@ -508,7 +525,7 @@ wxContractPath (const wxString& filename, const wxString& envname, const wxStrin return NULL; strcpy (dest, WXSTRINGCAST filename); -#ifdef __WINDOWS__ +#ifdef __WXMSW__ Unix2DosFilename(dest); #endif @@ -535,7 +552,7 @@ wxContractPath (const wxString& filename, const wxString& envname, const wxStrin strcpy(wxBuffer, "~"); if (user && *user) strcat(wxBuffer, user); -#ifdef __WINDOWS__ +#ifdef __WXMSW__ // strcat(wxBuffer, "\\"); #else // strcat(wxBuffer, "/"); @@ -566,7 +583,7 @@ char *wxFileNameFromPath (char *path) #endif return tcp + 1; } /* while */ -#ifdef __WINDOWS__ +#ifdef __WXMSW__ if (isalpha (*path) && *(path + 1) == ':') return path + 2; #endif @@ -593,7 +610,7 @@ wxString wxFileNameFromPath (const wxString& path1) #endif return wxString(tcp + 1); } /* while */ -#ifdef __WINDOWS__ +#ifdef __WXMSW__ if (isalpha (*path) && *(path + 1) == ':') return wxString(path + 2); #endif @@ -635,7 +652,7 @@ wxPathOnly (char *path) else i --; } -#ifdef __WINDOWS__ +#ifdef __WXMSW__ // Try Drive specifier if (isalpha (buf[0]) && buf[1] == ':') { @@ -683,7 +700,7 @@ wxString wxPathOnly (const wxString& path) else i --; } -#ifdef __WINDOWS__ +#ifdef __WXMSW__ // Try Drive specifier if (isalpha (buf[0]) && buf[1] == ':') { @@ -710,7 +727,7 @@ wxDos2UnixFilename (char *s) { if (*s == '\\') *s = '/'; -#ifdef __WINDOWS__ +#ifdef __WXMSW__ else *s = wxToLower (*s); // Case INDEPENDENT #endif @@ -719,10 +736,14 @@ wxDos2UnixFilename (char *s) } void +#ifdef __WXMSW__ +wxUnix2DosFilename (char *s) +#else wxUnix2DosFilename (char *WXUNUSED(s)) +#endif { // Yes, I really mean this to happen under DOS only! JACS -#ifdef __WINDOWS__ +#ifdef __WXMSW__ if (s) while (*s) { @@ -824,7 +845,7 @@ bool wxMkdir(const wxString& dir) { #ifdef __VMS__ return FALSE; -#elif (defined(__GNUWIN32__) && !defined(__MINGW32__)) || !defined(__WINDOWS__) +#elif (defined(__GNUWIN32__) && !defined(__MINGW32__)) || !defined(__WXMSW__) return (mkdir (WXSTRINGCAST dir, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) == 0); #else return (mkdir(WXSTRINGCAST dir) == 0); @@ -845,7 +866,7 @@ bool wxDirExists(const wxString& dir) { #ifdef __VMS__ return FALSE; -#elif !defined(__WINDOWS__) +#elif !defined(__WXMSW__) struct stat sbuf; return (stat(dir, &sbuf) != -1) && S_ISDIR(sbuf.st_mode) ? TRUE : FALSE; #else @@ -902,7 +923,7 @@ bool wxPathExists(const char *pszPathName) // Get a temporary filename, opening and closing the file. char *wxGetTempFileName(const wxString& prefix, char *buf) { -#ifdef __WINDOWS__ +#ifdef __WXMSW__ #ifndef __WIN32__ char tmp[144]; @@ -1049,7 +1070,7 @@ char *wxFindNextFile(void) return NULL; } -#elif defined(__WINDOWS__) +#elif defined(__WXMSW__) #ifdef __WIN32__ HANDLE wxFileStrucHandle = INVALID_HANDLE_VALUE; @@ -1064,7 +1085,7 @@ static struct _find_t wxFileStruc; static wxString wxFileSpec = ""; static int wxFindFileFlags; -char *wxFindFirstFile(const wxString& spec, int flags) +char *wxFindFirstFile(const char *spec, int flags) { wxFileSpec = spec; wxFindFileFlags = flags; /* MATTHEW: [5] Remember flags */ @@ -1214,7 +1235,7 @@ char *wxFindNextFile(void) } #endif - // __WINDOWS__ + // __WXMSW__ // Get current working directory. // If buf is NULL, allocates space using new, else @@ -1238,7 +1259,7 @@ bool wxSetWorkingDirectory(const wxString& d) { #ifdef __UNIX__ return (chdir(d) == 0); -#elif defined(__WINDOWS__) +#elif defined(__WXMSW__) #ifdef __WIN32__ return (bool)(SetCurrentDirectory(d) != 0); @@ -1282,7 +1303,8 @@ bool wxEndsWithPathSeparator(const char *pszFileName) bool wxFindFileInPath(wxString *pStr, const char *pszPath, const char *pszFile) { // we assume that it's not empty - wxCHECK_RET( Strlen(pszFile) != 0, FALSE); + wxCHECK_MSG( !IsEmpty(pszFile), FALSE, + "empty file name in wxFindFileInPath"); // skip path separator in the beginning of the file name if present if ( wxIsPathSeparator(*pszFile) ) @@ -1312,3 +1334,37 @@ bool wxFindFileInPath(wxString *pStr, const char *pszPath, const char *pszFile) return pc != NULL; // if true => we breaked from the loop } +void WXDLLEXPORT wxSplitPath(const char *pszFileName, + wxString *pstrPath, + wxString *pstrName, + wxString *pstrExt) +{ + wxCHECK_RET( pszFileName, "NULL file name in wxSplitPath" ); + + const char *pDot = strrchr(pszFileName, FILE_SEP_EXT); + const char *pSepUnix = strrchr(pszFileName, FILE_SEP_PATH_UNIX); + const char *pSepDos = strrchr(pszFileName, FILE_SEP_PATH_DOS); + + // take the last of the two + uint nPosUnix = pSepUnix ? pSepUnix - pszFileName : 0; + uint nPosDos = pSepDos ? pSepDos - pszFileName : 0; + if ( nPosDos > nPosUnix ) + nPosUnix = nPosDos; +// uint nLen = Strlen(pszFileName); + + if ( pstrPath ) + *pstrPath = wxString(pszFileName, nPosUnix); + if ( pDot ) { + uint nPosDot = pDot - pszFileName; + if ( pstrName ) + *pstrName = wxString(pszFileName + nPosUnix + 1, nPosDot - nPosUnix); + if ( pstrExt ) + *pstrExt = wxString(pszFileName + nPosDot + 1); + } + else { + if ( pstrName ) + *pstrName = wxString(pszFileName + nPosUnix + 1); + if ( pstrExt ) + pstrExt->Empty(); + } +}