]> git.lyx.org Git - lyx.git/blobdiff - src/support/FileInfo.C
fix typo that put too many include paths for most people
[lyx.git] / src / support / FileInfo.C
index b7ac32c5ce55a69d451c3b1e08c660662125794d..032174aa3a56040d980b4cf0f65af02f7492e4b0 100644 (file)
@@ -1,20 +1,25 @@
-// -*- C++ -*-
 /* This file is part of
  * ======================================================
- * 
+ *
  *           LyX, The Document Processor
- *        
+ *
  *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-1998 The LyX Team.
+ *           Copyright 1995-2001 The LyX Team.
  *
- * ======================================================*/
+ * ====================================================== */
 
 #include <config.h>
 
-#include <sys/types.h>
-#include <sys/stat.h>
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+//#include <sys/types.h>
+//#include <sys/stat.h>
+
 #include <cerrno>
 #include "FileInfo.h"
+#include "LAssert.h"
 
 #if !S_IRUSR
 # if S_IREAD
@@ -51,7 +56,7 @@
 #undef S_ISNWK
 #undef S_ISREG
 #undef S_ISSOCK
-#endif 
+#endif
 
 #if !defined(S_ISBLK) && defined(S_IFBLK)
 #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
@@ -82,7 +87,7 @@
 #define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
 #endif
 
-// Since major is a function on SVR4, we can't use `ifndef major'. 
+// Since major is a function on SVR4, we can't use `ifndef major'.
 // might want to put MAJOR_IN_MKDEV for SYSV
 #ifdef MAJOR_IN_MKDEV
 #include <sys/mkdev.h>
@@ -92,7 +97,7 @@
 #include <sys/sysmacros.h>
 #define HAVE_MAJOR
 #endif
-#ifdef major           
+#ifdef major
 #define HAVE_MAJOR
 #endif
 
@@ -121,40 +126,33 @@ FileInfo::FileInfo(string const & path, bool link)
 FileInfo::FileInfo(int fildes)
 {
        init();
-       status = fstat(fildes, buf);
+       status = fstat(fildes, &buf);
        if (status) err = errno;
 }
 
 
-FileInfo::~FileInfo()
-{
-       delete[] buf;
-}
-
-
 void FileInfo::init()
 {
        status = 0;
        err = NoErr;
-       buf = (struct stat*) new char[sizeof(struct stat)];
 }
 
 
 void FileInfo::dostat(bool link)
 {
        if (link) {
-               status = lstat(fname.c_str(), buf);
+               status = ::lstat(fname.c_str(), &buf);
        } else {
-               status = stat(fname.c_str(), buf);
+               status = ::stat(fname.c_str(), &buf);
        }
        if (status) err = errno;
 }
 
 
-FileInfo& FileInfo::newFile(string const &path, bool link)
+FileInfo & FileInfo::newFile(string const & path, bool link)
 {
        fname = path;
-       
+
        status = 0;
        err = NoErr;
 
@@ -164,29 +162,32 @@ FileInfo& FileInfo::newFile(string const &path, bool link)
 }
 
 
-FileInfo& FileInfo::newFile(int fildes)
+FileInfo & FileInfo::newFile(int fildes)
 {
        status = 0;
        err = NoErr;
-       status = fstat(fildes, buf);
+       status = fstat(fildes, &buf);
        if (status) err = errno;
        return *this;
 }
 
 
+// should not be in FileInfo
 char const * FileInfo::typeIndicator() const
 {
-       if (S_ISDIR(buf->st_mode)) return ("/");
+       lyx::Assert(isOK());
+
+       if (S_ISDIR(buf.st_mode)) return ("/");
 #ifdef S_ISLNK
-       if (S_ISLNK(buf->st_mode)) return ("@");
+       if (S_ISLNK(buf.st_mode)) return ("@");
 #endif
 #ifdef S_ISFIFO
-       if (S_ISFIFO(buf->st_mode)) return ("|");
+       if (S_ISFIFO(buf.st_mode)) return ("|");
 #endif
 #ifdef S_ISSOCK
-       if (S_ISSOCK(buf->st_mode)) return ("=");
+       if (S_ISSOCK(buf.st_mode)) return ("=");
 #endif
-       if (S_ISREG(buf->st_mode) && (buf->st_mode & (S_IEXEC | S_IXGRP | S_IXOTH)))
+       if (S_ISREG(buf.st_mode) && (buf.st_mode & (S_IEXEC | S_IXGRP | S_IXOTH)))
                return ("*");
        return "";
 }
@@ -194,58 +195,56 @@ char const * FileInfo::typeIndicator() const
 
 mode_t FileInfo::getMode() const
 {
-       return buf->st_mode;
-}
+       lyx::Assert(isOK());
 
-long FileInfo::getBlockSize() const
-{
-#ifndef __EMX__
-       return buf->st_blksize; /* Preferred I/O block size */
-#else
-#warning May be fixed in 0.13 (SMiyata)
-       return 512; /* Assume HPFS */
-#endif
+       return buf.st_mode;
 }
 
+
+// should not be in FileInfo
 void FileInfo::modeString(char * szString) const
 {
        szString[0] = typeLetter();
-       flagRWX((buf->st_mode & 0700) << 0, &szString[1]);
-       flagRWX((buf->st_mode & 0070) << 3, &szString[4]);
-       flagRWX((buf->st_mode & 0007) << 6, &szString[7]);
+       flagRWX((buf.st_mode & 0700) << 0, &szString[1]);
+       flagRWX((buf.st_mode & 0070) << 3, &szString[4]);
+       flagRWX((buf.st_mode & 0007) << 6, &szString[7]);
        setSticky(szString);
        szString[10] = 0;
 }
 
 
+// should not be in FileInfo
 char FileInfo::typeLetter() const
 {
+       lyx::Assert(isOK());
+
 #ifdef S_ISBLK
-       if (S_ISBLK(buf->st_mode)) return 'b';
+       if (S_ISBLK(buf.st_mode)) return 'b';
 #endif
-       if (S_ISCHR(buf->st_mode)) return 'c';
-       if (S_ISDIR(buf->st_mode)) return 'd';
-       if (S_ISREG(buf->st_mode)) return '-';
+       if (S_ISCHR(buf.st_mode)) return 'c';
+       if (S_ISDIR(buf.st_mode)) return 'd';
+       if (S_ISREG(buf.st_mode)) return '-';
 #ifdef S_ISFIFO
-       if (S_ISFIFO(buf->st_mode)) return 'p';
+       if (S_ISFIFO(buf.st_mode)) return 'p';
 #endif
 #ifdef S_ISLNK
-       if (S_ISLNK(buf->st_mode)) return 'l';
+       if (S_ISLNK(buf.st_mode)) return 'l';
 #endif
 #ifdef S_ISSOCK
-       if (S_ISSOCK(buf->st_mode)) return 's';
+       if (S_ISSOCK(buf.st_mode)) return 's';
 #endif
 #ifdef S_ISMPC
-       if (S_ISMPC(buf->st_mode)) return 'm';
+       if (S_ISMPC(buf.st_mode)) return 'm';
 #endif
 #ifdef S_ISNWK
-       if (S_ISNWK(buf->st_mode)) return 'n';
+       if (S_ISNWK(buf.st_mode)) return 'n';
 #endif
        return '?';
 }
 
 
-void FileInfo::flagRWX(unsigned short i, char * szString) const
+// should not be in FileInfo
+void FileInfo::flagRWX(mode_t i, char * szString) const
 {
        szString[0] = (i & S_IRUSR) ? 'r' : '-';
        szString[1] = (i & S_IWUSR) ? 'w' : '-';
@@ -253,22 +252,25 @@ void FileInfo::flagRWX(unsigned short i, char * szString) const
 }
 
 
+// should not be in FileInfo
 void FileInfo::setSticky(char * szString) const
 {
+       lyx::Assert(isOK());
+
 #ifdef S_ISUID
-       if (buf->st_mode & S_ISUID) {
+       if (buf.st_mode & S_ISUID) {
                if (szString[3] != 'x') szString[3] = 'S';
                else szString[3] = 's';
        }
 #endif
 #ifdef S_ISGID
-       if (buf->st_mode & S_ISGID) {
+       if (buf.st_mode & S_ISGID) {
                if (szString[6] != 'x') szString[6] = 'S';
                else szString[6] = 's';
        }
 #endif
 #ifdef S_ISVTX
-       if (buf->st_mode & S_ISVTX) {
+       if (buf.st_mode & S_ISVTX) {
                if (szString[9] != 'x') szString[9] = 'T';
                else szString[9] = 't';
        }
@@ -278,43 +280,50 @@ void FileInfo::setSticky(char * szString) const
 
 time_t FileInfo::getModificationTime() const
 {
-       return buf->st_mtime;
+       lyx::Assert(isOK());
+       return buf.st_mtime;
 }
 
 
 time_t FileInfo::getAccessTime() const
 {
-       return buf->st_atime;
+       lyx::Assert(isOK());
+       return buf.st_atime;
 }
 
 
-time_t  FileInfo::getStatusChangeTime() const
+time_t FileInfo::getStatusChangeTime() const
 {
-       return buf->st_ctime;
+       lyx::Assert(isOK());
+       return buf.st_ctime;
 }
 
 
 nlink_t FileInfo::getNumberOfLinks() const
 {
-       return buf->st_nlink;
+       lyx::Assert(isOK());
+       return buf.st_nlink;
 }
 
 
-uid_t  FileInfo::getUid() const
+uid_t FileInfo::getUid() const
 {
-       return buf->st_uid;
+       lyx::Assert(isOK());
+       return buf.st_uid;
 }
 
 
-gid_t  FileInfo::getGid() const
+gid_t FileInfo::getGid() const
 {
-       return buf->st_gid;
+       lyx::Assert(isOK());
+       return buf.st_gid;
 }
 
 
 off_t FileInfo::getSize() const
 {
-       return buf->st_size;
+       lyx::Assert(isOK());
+       return buf.st_size;
 }
 
 
@@ -335,55 +344,63 @@ bool FileInfo::isOK() const
 
 bool FileInfo::isLink() const
 {
-       return S_ISLNK(buf->st_mode);
+       lyx::Assert(isOK());
+       return S_ISLNK(buf.st_mode);
 }
 
 
 bool FileInfo::isRegular() const
 {
-       return S_ISREG(buf->st_mode);
+       lyx::Assert(isOK());
+       return S_ISREG(buf.st_mode);
 }
 
 
 bool FileInfo::isDir() const
 {
-       return S_ISDIR(buf->st_mode);
+       lyx::Assert(isOK());
+       return S_ISDIR(buf.st_mode);
 }
 
 
 bool FileInfo::isChar() const
 {
-       return S_ISCHR(buf->st_mode);
+       lyx::Assert(isOK());
+       return S_ISCHR(buf.st_mode);
 }
 
 
 bool FileInfo::isBlock() const
 {
-       return S_ISBLK(buf->st_mode);
+       lyx::Assert(isOK());
+       return S_ISBLK(buf.st_mode);
 }
 
 
 bool FileInfo::isFifo() const
 {
-       return S_ISFIFO(buf->st_mode);
+       lyx::Assert(isOK());
+       return S_ISFIFO(buf.st_mode);
 }
 
 
 bool FileInfo::isSocket() const
 {
+       lyx::Assert(isOK());
 #ifdef S_ISSOCK
-       return S_ISSOCK(buf->st_mode);
+       return S_ISSOCK(buf.st_mode);
 #else
        return false;
 #endif
 }
 
 
-bool FileInfo::access(int p)
+// should not be in FileInfo
+bool FileInfo::access(int p) const
 {
        // if we don't have a filename we fail
        if (fname.empty()) return false;
-       
+
        if (::access(fname.c_str(), p) == 0)
                return true;
        else {