]> git.tdb.fi Git - libs/core.git/blobdiff - source/stat.cpp
Style update: spaces around assignments
[libs/core.git] / source / stat.cpp
index 5a0ee45ba20fe92e029ad2aa5ab73d089fd3f71c..1dc46db78289dce316ffb36bee60b3a9539066e2 100644 (file)
@@ -6,6 +6,9 @@ Distributed under the LGPL
 */
 
 #include <cerrno>
+#ifdef WIN32
+#include <io.h>
+#endif
 #include <msp/core/except.h>
 #include "path.h"
 #include "stat.h"
@@ -26,11 +29,36 @@ struct stat stat(const Path &fn)
        return st;
 }
 
+int lstat(const Path &fn, struct stat &st)
+{
+#ifdef WIN32
+       return stat(fn, st);
+#else
+       return ::lstat(fn.str().c_str(), &st);
+#endif
+}
+
+struct stat lstat(const Path &fn)
+{
+       struct stat st;
+       if(lstat(fn, st)==-1)
+               throw SystemError("lstat failed", errno);
+       return st;
+}
+
 bool exists(const Path &path)
 {
        return access(path.str().c_str(), F_OK)==0;
 }
 
+bool is_reg(const Path &path)
+{
+       struct stat st;
+       if(stat(path, st)==0)
+               return S_ISREG(st.st_mode);
+       return false;
+}
+
 bool is_dir(const Path &path)
 {
        struct stat st;
@@ -39,5 +67,17 @@ bool is_dir(const Path &path)
        return false;
 }
 
+bool is_link(const Path &path)
+{
+#ifdef WIN32
+       (void)path;
+#else
+       struct stat st;
+       if(lstat(path, st)==0)
+               return S_ISLNK(st.st_mode);
+#endif
+       return false;
+}
+
 } // namespace FS
 } // namespace Msp