summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/kwsys/SystemTools.cxx62
-rw-r--r--Source/kwsys/SystemTools.hxx.in11
2 files changed, 73 insertions, 0 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index ae0bb1f..aec5b27 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/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/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in
index 725e8ae..82e1627 100644
--- a/Source/kwsys/SystemTools.hxx.in
+++ b/Source/kwsys/SystemTools.hxx.in
@@ -101,6 +101,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.
*/
static void ConvertToUnixSlashes(kwsys_std::string& path);
@@ -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.