X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/089e95217e26509f2c1a51ba490a5dd0bad22a96..29a35dd5fee0e33143a39824e71aefd66e3e4851:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index 51390ae725..6d9401b4a3 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -116,13 +116,6 @@ static wxChar wxFileFunctionsBuffer[4*_MAXPATHLEN]; const int wxInvalidOffset = -1; #endif -// ---------------------------------------------------------------------------- -// macros -// ---------------------------------------------------------------------------- - -// translate the filenames before passing them to OS functions -#define OS_FILENAME(s) (s.fn_str()) - // ============================================================================ // implementation // ============================================================================ @@ -138,7 +131,7 @@ const int wxInvalidOffset = -1; // regardless of the mode parameter. This hack works around the problem by // setting the mode with _wchmod. // -int wxCRT_Open(const wchar_t *pathname, int flags, mode_t mode) +int wxCRT_OpenW(const wchar_t *pathname, int flags, mode_t mode) { int moreflags = 0; @@ -391,16 +384,7 @@ void wxStripExtension(wchar_t *buffer) { wxDoStripExtension(buffer); } void wxStripExtension(wxString& buffer) { - //RN: Be careful about the handling the case where - //buffer.length() == 0 - for(size_t i = buffer.length() - 1; i != wxString::npos; --i) - { - if (buffer.GetChar(i) == wxT('.')) - { - buffer = buffer.Left(i); - break; - } - } + buffer = wxFileName::StripExtension(buffer); } // Destructive removal of /./ and /../ stuff @@ -482,7 +466,7 @@ wxString wxRealPath(const wxString& path) wxChar *wxCopyAbsolutePath(const wxString& filename) { if (filename.empty()) - return (wxChar *) NULL; + return NULL; if (! wxIsAbsolutePath(wxExpandPath(wxFileFunctionsBuffer, filename))) { @@ -715,7 +699,7 @@ wxContractPath (const wxString& filename, static wxChar dest[_MAXPATHLEN]; if (filename.empty()) - return (wxChar *) NULL; + return NULL; wxStrcpy (dest, filename); #ifdef __WXMSW__ @@ -828,7 +812,7 @@ wxPathOnly (wxChar *path) } #endif } - return (wxChar *) NULL; + return NULL; } // Return just the directory, or NULL if no directory @@ -971,8 +955,8 @@ static void wxDoDos2UnixFilename(T *s) if (s) while (*s) { - if (*s == _T('\\')) - *s = _T('/'); + if (*s == wxT('\\')) + *s = wxT('/'); #ifdef __WXMSW__ else *s = wxTolower(*s); // Case INDEPENDENT @@ -1188,7 +1172,7 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite) #if !defined(__VISAGECPP__) && !defined(__WXMAC__) || defined(__UNIX__) // no chmod in VA. Should be some permission API for HPFS386 partitions // however - if ( chmod(OS_FILENAME(file2), fbuf.st_mode) != 0 ) + if ( chmod(file2.fn_str(), fbuf.st_mode) != 0 ) { wxLogSysError(_("Impossible to set permissions for the file '%s'"), file2.c_str()); @@ -1253,7 +1237,7 @@ bool wxRemoveFile(const wxString& file) int res = 1; // TODO with VFSFileDelete() #else - int res = unlink(OS_FILENAME(file)); + int res = unlink(file.fn_str()); #endif return res == 0; @@ -1263,14 +1247,16 @@ bool wxMkdir(const wxString& dir, int perm) { #if defined(__WXPALMOS__) return false; -#elif defined(__WXMAC__) && !defined(__UNIX__) - return (mkdir(dir.fn_str() , 0 ) == 0); -#else // !Mac - const wxChar *dirname = dir.c_str(); +#else +#if defined(__WXMAC__) && !defined(__UNIX__) + if ( mkdir(dir.fn_str(), 0) != 0 ) // assume mkdir() has 2 args on non Windows-OS/2 platforms and on Windows too // for the GNU compiler -#if (!(defined(__WXMSW__) || defined(__OS2__) || defined(__DOS__))) || (defined(__GNUWIN32__) && !defined(__MINGW32__)) || defined(__WINE__) || defined(__WXMICROWIN__) +#elif (!(defined(__WXMSW__) || defined(__OS2__) || defined(__DOS__))) || \ + (defined(__GNUWIN32__) && !defined(__MINGW32__)) || \ + defined(__WINE__) || defined(__WXMICROWIN__) + const wxChar *dirname = dir.c_str(); #if defined(MSVCRT) wxUnusedVar(perm); if ( mkdir(wxFNCONV(dirname)) != 0 ) @@ -1279,8 +1265,9 @@ bool wxMkdir(const wxString& dir, int perm) #endif #elif defined(__OS2__) wxUnusedVar(perm); - if (::DosCreateDir((PSZ)dirname, NULL) != 0) // enhance for EAB's?? + if (::DosCreateDir(dir.c_str(), NULL) != 0) // enhance for EAB's?? #elif defined(__DOS__) + const wxChar *dirname = dir.c_str(); #if defined(__WATCOMC__) (void)perm; if ( wxMkDir(wxFNSTRINGCAST wxFNCONV(dirname)) != 0 ) @@ -1291,36 +1278,43 @@ bool wxMkdir(const wxString& dir, int perm) #endif #else // !MSW, !DOS and !OS/2 VAC++ wxUnusedVar(perm); -#ifdef __WXWINCE__ - if ( !CreateDirectory(dirname, NULL) ) -#else + #ifdef __WXWINCE__ + if ( CreateDirectory(dir.fn_str(), NULL) == 0 ) + #else if ( wxMkDir(dir.fn_str()) != 0 ) -#endif + #endif #endif // !MSW/MSW { - wxLogSysError(_("Directory '%s' couldn't be created"), dirname); - + wxLogSysError(_("Directory '%s' couldn't be created"), dir); return false; } return true; -#endif // Mac/!Mac +#endif // PALMOS/!PALMOS } bool wxRmdir(const wxString& dir, int WXUNUSED(flags)) { #if defined(__VMS__) return false; //to be changed since rmdir exists in VMS7.x -#elif defined(__OS2__) - return (::DosDeleteDir(dir.c_str()) == 0); -#elif defined(__WXWINCE__) - return (RemoveDirectory(dir) != 0); #elif defined(__WXPALMOS__) // TODO with VFSFileRename() return false; #else - return (wxRmDir(OS_FILENAME(dir)) == 0); -#endif + #if defined(__OS2__) + if ( ::DosDeleteDir(dir.c_str()) != 0 ) + #elif defined(__WXWINCE__) + if ( RemoveDirectory(dir.fn_str()) == 0 ) + #else + if ( wxRmDir(dir.fn_str()) != 0 ) + #endif + { + wxLogSysError(_("Directory '%s' couldn't be deleted"), dir); + return false; + } + + return true; +#endif // PALMOS/!PALMOS } // does the path exists? (may have or not '/' or '\\' at the end) @@ -1335,7 +1329,7 @@ bool wxDirExists(const wxString& pathName) while ( wxEndsWithPathSeparator(strPath) ) { size_t len = strPath.length(); - if ( len == 1 || (len == 3 && strPath[len - 2] == _T(':')) ) + if ( len == 1 || (len == 3 && strPath[len - 2] == wxT(':')) ) break; strPath.Truncate(len - 1); @@ -1344,8 +1338,8 @@ bool wxDirExists(const wxString& pathName) #ifdef __OS2__ // OS/2 can't handle "d:", it wants either "d:\" or "d:." - if (strPath.length() == 2 && strPath[1u] == _T(':')) - strPath << _T('.'); + if (strPath.length() == 2 && strPath[1u] == wxT(':')) + strPath << wxT('.'); #endif #if defined(__WXPALMOS__) @@ -1483,11 +1477,11 @@ wxChar *wxDoGetCwd(wxChar *buf, int sz) { #if defined(__WXPALMOS__) // TODO - if(buf && sz>0) buf[0] = _T('\0'); + if(buf && sz>0) buf[0] = wxT('\0'); return buf; #elif defined(__WXWINCE__) // TODO - if(buf && sz>0) buf[0] = _T('\0'); + if(buf && sz>0) buf[0] = wxT('\0'); return buf; #else if ( !buf ) @@ -1561,7 +1555,7 @@ wxChar *wxDoGetCwd(wxChar *buf, int sz) // sense at all to me - empty string is a better error indicator // (NULL might be even better but I'm afraid this could lead to // problems with the old code assuming the return is never NULL) - buf[0] = _T('\0'); + buf[0] = wxT('\0'); } else // ok, but we might need to massage the path into the right format { @@ -1619,7 +1613,7 @@ bool wxSetWorkingDirectory(const wxString& d) #if defined(__OS2__) if (d[1] == ':') { - ::DosSetDefaultDisk(wxToupper(d[0]) - _T('A') + 1); + ::DosSetDefaultDisk(wxToupper(d[0]) - wxT('A') + 1); // do not call DosSetCurrentDir when just changing drive, // since it requires e.g. "d:." instead of "d:"! if (d.length() == 2) @@ -1692,7 +1686,7 @@ bool wxFindFileInPath(wxString *pStr, const wxString& szPath, const wxString& sz { // we assume that it's not empty wxCHECK_MSG( !szFile.empty(), false, - _T("empty file name in wxFindFileInPath")); + wxT("empty file name in wxFindFileInPath")); // skip path separator in the beginning of the file name if present wxString szFile2; @@ -1773,7 +1767,7 @@ int WXDLLIMPEXP_BASE wxParseCommonDialogsFilter(const wxString& filterStr, } else { - wxFAIL_MSG( _T("missing '|' in the wildcard string!") ); + wxFAIL_MSG( wxT("missing '|' in the wildcard string!") ); } break; @@ -1824,13 +1818,13 @@ int WXDLLIMPEXP_BASE wxParseCommonDialogsFilter(const wxString& filterStr, { wxString before = descriptions[k].Left(pos); wxString after = descriptions[k].Mid(pos+filters[k].Len()); - pos = before.Find(_T('('),true); - if (pos>before.Find(_T(')'),true)) + pos = before.Find(wxT('('),true); + if (pos>before.Find(wxT(')'),true)) { before = before.Left(pos+1); before << filters[k]; - pos = after.Find(_T(')')); - int pos1 = after.Find(_T('(')); + pos = after.Find(wxT(')')); + int pos1 = after.Find(wxT('(')); if (pos != wxNOT_FOUND && (pos