Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

EtcFstab.h

Go to the documentation of this file.
00001 #ifndef ETC_FSTAB_H
00002 #define ETC_FSTAB_H
00003 
00004 #include <string>
00005 #include <list>
00006 #include <map>
00007 
00008 #include "y2storage/StorageInterface.h"
00009 
00010 class AsciiFile;
00011 struct FstabChange;
00012 
00013 struct FstabEntry
00014     {
00015     FstabEntry() { freq=passno=0; crypto=loop=noauto=false; 
00016                    encr=storage::ENC_NONE; mount_by=storage::MOUNTBY_DEVICE; }
00017     FstabEntry& operator=( const FstabChange& rhs );
00018     friend std::ostream& operator<< (std::ostream& s, const FstabEntry &v );
00019 
00020     string device;
00021     string dentry;
00022     string mount;
00023     string fs;
00024     std::list<string> opts;
00025     int freq;
00026     int passno;
00027     bool loop;
00028     bool noauto;
00029     bool crypto;
00030     string loop_dev;
00031     storage::EncryptType encr;
00032     storage::MountByType mount_by;
00033 
00034     void calcDependent();
00035     };
00036 
00037 inline std::ostream& operator<< (std::ostream& s, const FstabEntry &v )
00038     {
00039     s << "device:" << v.device 
00040       << " dentry:" << v.dentry << " mount:" << v.mount 
00041       << " fs:" << v.fs << " opts:" << mergeString( v.opts, "," )
00042       << " freq:" << v.freq << " passno:" << v.passno;
00043     if( v.noauto )
00044         s << " noauto";
00045     if( v.crypto )
00046         s << " crypto";
00047     if( v.loop )
00048         s << " loop";
00049     if( !v.loop_dev.empty() )
00050         s << " loop_dev:" << v.loop_dev;
00051     if( v.encr != storage::ENC_NONE )
00052         s << " encr:" << v.encr;
00053     return( s );
00054     }
00055 
00056 struct FstabChange
00057     {
00058     FstabChange() { freq=passno=0; encr=storage::ENC_NONE; }
00059     FstabChange( const FstabEntry& e ) { *this = e; }
00060     FstabChange& operator=( const FstabEntry& rhs )
00061         {
00062         device = rhs.device;
00063         dentry = rhs.dentry; mount = rhs.mount; fs = rhs.fs;
00064         opts = rhs.opts; freq = rhs.freq; passno = rhs.passno;
00065         loop_dev = rhs.loop_dev; encr = rhs.encr;
00066         return( *this );
00067         }
00068     friend std::ostream& operator<< (std::ostream& s, const FstabChange &v );
00069     string device;
00070     string dentry;
00071     string mount;
00072     string fs;
00073     std::list<string> opts;
00074     int freq;
00075     int passno;
00076     string loop_dev;
00077     storage::EncryptType encr;
00078     };
00079 
00080 inline FstabEntry& FstabEntry::operator=( const FstabChange& rhs )
00081     {
00082     device = rhs.device;
00083     dentry = rhs.dentry; mount = rhs.mount; fs = rhs.fs;
00084     opts = rhs.opts; freq = rhs.freq; passno = rhs.passno;
00085     loop_dev = rhs.loop_dev; encr = rhs.encr;
00086     calcDependent();
00087     return( *this );
00088     }
00089 
00090 inline std::ostream& operator<< (std::ostream& s, const FstabChange &v )
00091     {
00092     s << "device:" << v.device 
00093       << " dentry:" << v.dentry << " mount:" << v.mount 
00094       << " fs:" << v.fs << " opts:" << mergeString( v.opts, "," )
00095       << " freq:" << v.freq << " passno:" << v.passno;
00096     if( !v.loop_dev.empty() )
00097         s << " loop_dev:" << v.loop_dev;
00098     if( v.encr != storage::ENC_NONE )
00099         s << " encr:" << v.encr;
00100     return( s );
00101     }
00102 
00103 class EtcFstab 
00104     {
00105     public:
00106         EtcFstab( const string& prefix = "", bool rootMounted=true );
00107         bool findDevice( const string& dev, FstabEntry& entry ) const;
00108         bool findDevice( const std::list<string>& dl, FstabEntry& entry ) const;
00109         bool findMount( const string& mount, FstabEntry& entry ) const;
00110         bool findUuidLabel( const string& uuid, const string& label,
00111                             FstabEntry& entry ) const;
00112         void setDevice( const FstabEntry& entry, const string& device );
00113         int updateEntry( const string& dev, const string& mount,
00114                          const string& fs, const string& opts="defaults" );
00115         int updateEntry( const FstabChange& entry );
00116         int addEntry( const FstabChange& entry );
00117         int removeEntry( const FstabEntry& entry );
00118         int changeRootPrefix( const string& prfix );
00119         void getFileBasedLoops( const string& prefix, std::list<FstabEntry>& l );
00120         void getEntries( std::list<FstabEntry>& l );
00121         string addText( bool doing, bool crypto, const string&  mp );
00122         string updateText( bool doing, bool crypto, const string&  mp );
00123         string removeText( bool doing, bool crypto, const string&  mp );
00124         int flush();
00125 
00126     protected:
00127         struct Entry
00128             {
00129             enum operation { NONE, ADD, REMOVE, UPDATE };
00130             Entry() { op=NONE; }
00131             operation op;
00132             FstabEntry nnew;
00133             FstabEntry old;
00134             };
00135 
00136         void readFiles();
00137         AsciiFile* findFile( const FstabEntry& e, AsciiFile*& fstab,
00138                              AsciiFile*& cryptotab, int& lineno );
00139         void makeStringList( const FstabEntry& e, std::list<string>& ls );
00140         string createTabLine( const FstabEntry& e );
00141 
00142         static unsigned fstabFields[6];
00143         static unsigned cryptotabFields[6];
00144 
00145         string prefix;
00146         std::list<Entry> co;
00147     };
00149 
00150 #endif

Generated on Wed Sep 14 11:27:07 2005 for yast2-storage by  doxygen 1.4.4