From 17af95bbbaf22d8d9c924ee314791404545ea385 Mon Sep 17 00:00:00 2001 From: Kent Williams <norman-k-williams@uiowa.edu> Date: Thu, 10 Apr 2003 13:41:15 -0400 Subject: [PATCH] Removed platform-specific functions from Code/IO/itkIOCommon, fixed code to use kwsys/SystemTools --- SystemTools.cxx | 62 ++++++++++++++++++++++++++++++++++++++++++++++ SystemTools.hxx.in | 11 ++++++++ 2 files changed, 73 insertions(+) diff --git a/SystemTools.cxx b/SystemTools.cxx index b673711..b73d319 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -1016,6 +1016,29 @@ bool SystemTools::CopyFileAlways(const char* source, const char* destination) return true; } +// return size of file; also returns zero if no file exists +unsigned long SystemTools::FileLength(const char* filename) +{ + struct stat fs; + if (stat(filename, &fs) != 0) + { + return 0; + } + else + { + return fs.st_size; + } +} + +int SystemTools::Strucmp(const char *s1, const char *s2) +{ +#ifdef _WIN32 + return _stricmp(s1,s2); +#else + return strcasecmp(s1,s2); +#endif +} + // return true if the file exists long int SystemTools::ModifiedTime(const char* filename) { @@ -1042,6 +1065,45 @@ bool SystemTools::RemoveFile(const char* source) return unlink(source) != 0 ? false : true; } +char *SystemTools +::RealPath(const char *path, char *resolved_path) +{ +#if defined(_WIN32) + char pathpart[itk::IOCommon::ITK_MAXPATHLEN]; + strcpy(pathpart,path); + char fnamepart[itk::IOCommon::ITK_MAXPATHLEN]; + char *slash; + + if((slash = strrchr(pathpart,'/')) == NULL) + { + slash = strrchr(pathpart,'\\'); + } + + if(slash == NULL) // no path part, so just use current dir. + { + Getcwd(pathpart,sizeof(pathpart)); + strcpy(fnamepart,path); + } + else // change directory to path part, getcwd to find OS resolved path + { + *slash = '\0'; + strcpy(fnamepart,slash+1); + + char savedir[itk::IOCommon::ITK_MAXPATHLEN]; + Getcwd(savedir,sizeof(savedir)); + Chdir(pathpart); + Getcwd(pathpart,sizeof(pathpart)); + Chdir(savedir); + } + strcpy(resolved_path,pathpart); + strcat(resolved_path,"/"); + strcat(resolved_path,fnamepart); + return resolved_path; +#else + return realpath(path,resolved_path); +#endif +} + /** * Find the file the given name. Searches the given path and then * the system search path. Returns the full path to the file if it is diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in index 8cf3396..2f9a618 100644 --- a/SystemTools.hxx.in +++ b/SystemTools.hxx.in @@ -100,6 +100,11 @@ public: */ static kwsys_std::string UpperCase(const kwsys_std::string&); + /** + * do a case-independent string comparison + */ + static int Strucmp(const char *s1, const char *s2); + /** * Replace Windows file system slashes with Unix-style slashes. */ @@ -123,6 +128,12 @@ public: /** Return true if a file exists in the current directory. */ static bool FileExists(const char* filename); + static unsigned long FileLength(const char *filename); + /** + * given a (possibly) relative path, return the completely + * qualified path to a file system entity + */ + static char *RealPath(const char *path, char *resolved_path); /** * Add the paths from the environment variable PATH to the * string vector passed in. -- GitLab