home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lyx-0.13.2.tar.gz / lyx-0.13.2.tar / lyx-0.13.2 / src / FileInfo.h < prev    next >
C/C++ Source or Header  |  1998-04-23  |  2KB  |  139 lines

  1. // -*- C++ -*-
  2. /* This file is part of
  3. * ======================================================
  4. *           LyX, The Document Processor
  5. *        
  6. *           Copyright (C) 1995 1996 Matthias Ettrich
  7. *           and the LyX Team.
  8. *
  9. *======================================================*/
  10.  
  11. #ifndef _FILE_INFO_H
  12. #define _FILE_INFO_H
  13.  
  14. #include <unistd.h>
  15. #include <time.h>
  16. #include <sys/types.h>
  17. #include <sys/stat.h>
  18. #include "LString.h"
  19.  
  20. /** Use objects of this class to get information about files. */
  21. class FileInfo {
  22. public:
  23.     ///
  24.     FileInfo();
  25.  
  26.     ///
  27.     FileInfo(LString const &path, bool link = false);
  28.  
  29.     ///
  30.     FileInfo(int fildes);
  31.  
  32.     ///
  33.     ~FileInfo();
  34.  
  35.     ///
  36.     FileInfo& newFile(LString const &path, bool link = false);
  37.  
  38.     ///
  39.         FileInfo& newFile(int fildes);
  40.     
  41.     /// returns a character describing file type (ls -F)
  42.     char const *typeIndicator();
  43.  
  44.     ///
  45.     mode_t getMode();
  46.  
  47.     ///
  48.     long getBlockSize();
  49.     
  50.     /// constructs standard mode string (ls style)
  51.     void modeString(char *szString);
  52.     
  53.     /// returns a letter describing a file type (ls style)
  54.     char typeLetter();
  55.     
  56.     /// builds 'rwx' string describing file access rights
  57.     void flagRWX(unsigned short i, char *szString);
  58.     
  59.     /// updates mode string to match suid/sgid/sticky bits
  60.     void setSticky(char *szString);
  61.  
  62.     ///
  63.     time_t& getModificationTime();
  64.  
  65.     ///
  66.     time_t& getAccessTime();
  67.  
  68.     ///
  69.     time_t& getStatusChangeTime();
  70.  
  71.     ///
  72.     off_t getSize();
  73.  
  74.     ///
  75.     nlink_t getNumberOfLinks();
  76.  
  77.     ///
  78.     uid_t getUid();
  79.     ///
  80.     gid_t getGid();
  81.     ///
  82.     bool isOK();
  83.     ///
  84.     enum perm_test {
  85.         rperm = R_OK, // test for read permission
  86.         wperm = W_OK, // test for write permission
  87.         xperm = X_OK, // test for execute (search) permission
  88.         eperm = F_OK  // test for existence of file
  89.     };
  90.     ///
  91.     bool access(int p);
  92.     ///
  93.     bool writable() { return access(FileInfo::wperm); }
  94.     ///
  95.     bool readable() { return access(FileInfo::rperm); }
  96.     ///
  97.     bool executable() { return access(FileInfo::xperm); }
  98.     ///
  99.     bool exist() { return access(FileInfo::eperm); }
  100.     ///
  101.     bool isLink();
  102.     ///
  103.     bool isRegular();
  104.     ///
  105.     bool isDir();
  106.     ///
  107.     bool isChar();
  108.     ///
  109.     bool isBlock();
  110.     ///
  111.     bool isFifo();
  112.     ///
  113.     bool isSocket();
  114.     ///
  115.     int getError();
  116.     ///
  117.     enum {
  118.         ///
  119.         NoErr = -1
  120.     };
  121. private:
  122.     ///
  123.     void init();
  124.     ///
  125.     void dostat(bool);
  126.     ///
  127.     struct stat *buf;
  128.     ///
  129.     int status;
  130.     ///
  131.     int err;
  132.     ///
  133.     LString fname;
  134. };
  135.  
  136. #endif
  137.  
  138.