diff options
| author | Bob Jamison <ishmalius@gmail.com> | 2006-11-17 05:37:21 +0000 |
|---|---|---|
| committer | ishmal <ishmal@users.sourceforge.net> | 2006-11-17 05:37:21 +0000 |
| commit | 4239442dbc46899803c44fb68b0cc79960966c40 (patch) | |
| tree | 34303660fbd2ab5b78074fa72a98720cd02f7911 /buildtool.cpp | |
| parent | removed pdf.cpp from the list to make 'make update-po' work again (diff) | |
| download | inkscape-4239442dbc46899803c44fb68b0cc79960966c40.tar.gz inkscape-4239442dbc46899803c44fb68b0cc79960966c40.zip | |
Better file checking
(bzr r1968)
Diffstat (limited to 'buildtool.cpp')
| -rw-r--r-- | buildtool.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/buildtool.cpp b/buildtool.cpp index 11d6b7fa9..d738e03a2 100644 --- a/buildtool.cpp +++ b/buildtool.cpp @@ -2088,6 +2088,16 @@ protected: bool copyFile(const String &srcFile, const String &destFile); /** + * Tests if the file exists and is a regular file + */ + bool isRegularFile(const String &fileName); + + /** + * Tests if the file exists and is a directory + */ + bool isDirectory(const String &fileName); + + /** * Tests is the modification date of fileA is newer than fileB */ bool isNewerThan(const String &fileA, const String &fileB); @@ -3030,6 +3040,8 @@ bool MakeBase::copyFile(const String &srcFile, const String &destFile) } //# 3 do the data copy +#ifndef __WIN32__ + FILE *srcf = fopen(srcNative.c_str(), "rb"); if (!srcf) { @@ -3054,7 +3066,59 @@ bool MakeBase::copyFile(const String &srcFile, const String &destFile) fclose(destf); fclose(srcf); +#else + + if (!CopyFile(srcNative.c_str(), destNative.c_str(), false)) + { + error("copyFile from %s to %s failed", + srcNative.c_str(), destNative.c_str()); + return false; + } + +#endif /* __WIN32__ */ + + + return true; +} + + +/** + * Tests if the file exists and is a regular file + */ +bool MakeBase::isRegularFile(const String &fileName) +{ + String native = getNativePath(fileName); + struct stat finfo; + + //Exists? + if (stat(native.c_str(), &finfo)<0) + return false; + + + //check the file mode + if (!S_ISREG(finfo.st_mode)) + return false; + + return true; +} + +/** + * Tests if the file exists and is a directory + */ +bool MakeBase::isDirectory(const String &fileName) +{ + String native = getNativePath(fileName); + struct stat finfo; + + //Exists? + if (stat(native.c_str(), &finfo)<0) + return false; + + + //check the file mode + if (!S_ISDIR(finfo.st_mode)) + return false; return true; } @@ -4925,6 +4989,11 @@ public: String fullDest = parent.resolve(toFileName); //trace("copy %s to file %s", fullSource.c_str(), // fullDest.c_str()); + if (!isRegularFile(fullSource)) + { + error("copy : file %s does not exist", fullSource.c_str()); + return false; + } if (!isNewerThan(fullSource, fullDest)) { return true; @@ -5010,6 +5079,11 @@ public: String fullDest = parent.resolve(destPath); //trace("copy %s to new dir : %s", fullSource.c_str(), // fullDest.c_str()); + if (!isRegularFile(fullSource)) + { + error("copy : file %s does not exist", fullSource.c_str()); + return false; + } if (!isNewerThan(fullSource, fullDest)) { return true; |
