lib/fsm.h

Go to the documentation of this file.
00001 #ifndef H_FSM
00002 #define H_FSM
00003 
00009 #include "cpio.h"
00010 
00011 /*@-exportlocal@*/
00012 /*@unchecked@*/
00013 extern int _fsm_debug;
00014 /*@=exportlocal@*/
00015 
00018 #define FSM_VERBOSE     0x8000
00019 #define FSM_INTERNAL    0x4000
00020 #define FSM_SYSCALL     0x2000
00021 #define FSM_DEAD        0x1000
00022 
00023 #define _fv(_a)         ((_a) | FSM_VERBOSE)
00024 #define _fi(_a)         ((_a) | FSM_INTERNAL)
00025 #define _fs(_a)         ((_a) | (FSM_INTERNAL | FSM_SYSCALL))
00026 #define _fd(_a)         ((_a) | (FSM_INTERNAL | FSM_DEAD))
00027 
00028 typedef enum fileStage_e {
00029     FSM_UNKNOWN =   0,
00030     FSM_INIT    =  _fd(1),
00031     FSM_PRE     =  _fd(2),
00032     FSM_PROCESS =  _fv(3),
00033     FSM_POST    =  _fd(4),
00034     FSM_UNDO    =  5,
00035     FSM_FINI    =  6,
00036 
00037     FSM_PKGINSTALL      = _fd(7),
00038     FSM_PKGERASE        = _fd(8),
00039     FSM_PKGBUILD        = _fd(9),
00040     FSM_PKGCOMMIT       = _fd(10),
00041     FSM_PKGUNDO         = _fd(11),
00042 
00043     FSM_CREATE  =  _fd(17),
00044     FSM_MAP     =  _fd(18),
00045     FSM_MKDIRS  =  _fi(19),
00046     FSM_RMDIRS  =  _fi(20),
00047     FSM_MKLINKS =  _fi(21),
00048     FSM_NOTIFY  =  _fd(22),
00049     FSM_DESTROY =  _fd(23),
00050     FSM_VERIFY  =  _fd(24),
00051     FSM_COMMIT  =  _fd(25),
00052 
00053     FSM_UNLINK  =  _fs(33),
00054     FSM_RENAME  =  _fs(34),
00055     FSM_MKDIR   =  _fs(35),
00056     FSM_RMDIR   =  _fs(36),
00057     FSM_CHOWN   =  _fs(37),
00058     FSM_LCHOWN  =  _fs(38),
00059     FSM_CHMOD   =  _fs(39),
00060     FSM_UTIME   =  _fs(40),
00061     FSM_SYMLINK =  _fs(41),
00062     FSM_LINK    =  _fs(42),
00063     FSM_MKFIFO  =  _fs(43),
00064     FSM_MKNOD   =  _fs(44),
00065     FSM_LSTAT   =  _fs(45),
00066     FSM_STAT    =  _fs(46),
00067     FSM_READLINK=  _fs(47),
00068     FSM_CHROOT  =  _fs(48),
00069 
00070     FSM_NEXT    =  _fd(65),
00071     FSM_EAT     =  _fd(66),
00072     FSM_POS     =  _fd(67),
00073     FSM_PAD     =  _fd(68),
00074     FSM_TRAILER =  _fd(69),
00075     FSM_HREAD   =  _fd(70),
00076     FSM_HWRITE  =  _fd(71),
00077     FSM_DREAD   =  _fs(72),
00078     FSM_DWRITE  =  _fs(73),
00079 
00080     FSM_ROPEN   =  _fs(129),
00081     FSM_READ    =  _fs(130),
00082     FSM_RCLOSE  =  _fs(131),
00083     FSM_WOPEN   =  _fs(132),
00084     FSM_WRITE   =  _fs(133),
00085     FSM_WCLOSE  =  _fs(134)
00086 } fileStage;
00087 #undef  _fv
00088 #undef  _fi
00089 #undef  _fs
00090 #undef  _fd
00091 
00095 struct hardLink_s {
00096 /*@owned@*/ struct hardLink_s * next;
00097 /*@owned@*/ const char ** nsuffix;
00098 /*@owned@*/ int * filex;
00099     struct stat sb;
00100     int nlink;
00101     int linksLeft;
00102     int linkIndex;
00103     int createdPath;
00104 };
00105 
00109 struct fsmIterator_s {
00110 /*@kept@*/ rpmTransactionSet ts;        
00111 /*@kept@*/ TFI_t fi;                    
00112     int reverse;                        
00113     int isave;                          
00114     int i;                              
00115 };
00116 
00120 struct fsm_s {
00121 /*@owned@*/ const char * path;          
00122 /*@owned@*/ const char * opath;         
00123     FD_t cfd;                           
00124     FD_t rfd;                           
00125 /*@dependent@*/ char * rdbuf;           
00126 /*@owned@*/ char * rdb;                 
00127     size_t rdsize;                      
00128     size_t rdlen;                       
00129     size_t rdnb;                        
00130     FD_t wfd;                           
00131 /*@dependent@*/ char * wrbuf;           
00132 /*@owned@*/ char * wrb;                 
00133     size_t wrsize;                      
00134     size_t wrlen;                       
00135     size_t wrnb;                        
00136 /*@only@*/ FSMI_t iter;                 
00137     int ix;                             
00138 /*@only@*/ struct hardLink_s * links;   
00139 /*@only@*/ struct hardLink_s * li;      
00140 /*@kept@*/ /*@null@*/ unsigned int * archiveSize;       
00141 /*@kept@*/ /*@null@*/ const char ** failedFile; 
00142 /*@shared@*/ const char * subdir;       
00143 /*@unused@*/ char subbuf[64];   /* XXX eliminate */
00144 /*@observer@*/ const char * osuffix;    
00145 /*@observer@*/ const char * nsuffix;    
00146 /*@shared@*/ const char * suffix;       
00147     char sufbuf[64];    /* XXX eliminate */
00148 /*@only@*/ /*@null@*/ short * dnlx;     
00149 /*@only@*/ /*@null@*/ char * ldn;       
00150     int ldnlen;                         
00151     int ldnalloc;                       
00152     int postpone;                       
00153     int diskchecked;                    
00154     int exists;                         
00155     int mkdirsdone;                     
00156     int astriplen;                      
00157     int rc;                             
00158     int commit;                         
00159     cpioMapFlags mapFlags;              
00160 /*@shared@*/ const char * dirName;      
00161 /*@shared@*/ const char * baseName;     
00162 /*@shared@*/ const char * fmd5sum;      
00163     unsigned fflags;                    
00164     fileAction action;                  
00165     fileStage goal;                     
00166     fileStage stage;                    
00167     struct stat sb;                     
00168     struct stat osb;                    
00169 };
00170 
00171 #ifdef __cplusplus
00172 extern "C" {
00173 #endif
00174 
00175 /*@-exportlocal@*/
00181 /*@observer@*/ const char *const fileStageString(fileStage a)   /*@*/;
00182 
00188 /*@observer@*/ const char *const fileActionString(fileAction a) /*@*/;
00189 /*@=exportlocal@*/
00190 
00195 /*@only@*/ FSM_t newFSM(void)
00196         /*@*/;
00197 
00203 /*@null@*/ FSM_t freeFSM(/*@only@*/ /*@null@*/ FSM_t fsm)
00204         /*@modifies fsm @*/;
00205 
00216 int fsmSetup(FSM_t fsm, fileStage goal,
00217                 /*@kept@*/ const rpmTransactionSet ts,
00218                 /*@kept@*/ const TFI_t fi,
00219                 FD_t cfd,
00220                 /*@out@*/ unsigned int * archiveSize,
00221                 /*@out@*/ const char ** failedFile)
00222         /*@modifies fsm, *archiveSize, *failedFile, fileSystem  @*/;
00223 
00229 int fsmTeardown(FSM_t fsm)
00230         /*@modifies fsm @*/;
00231 
00232 /*@-exportlocal@*/
00238 /*@kept@*/ rpmTransactionSet fsmGetTs(const FSM_t fsm)
00239         /*@*/;
00240 
00246 /*@kept@*/ TFI_t fsmGetFi(/*@partial@*/const FSM_t fsm)
00247         /*@*/;
00248 
00253 int fsmMapPath(FSM_t fsm)
00254         /*@modifies fsm @*/;
00255 
00260 int fsmMapAttrs(FSM_t fsm)
00261         /*@modifies fsm @*/;
00262 /*@=exportlocal@*/
00263 
00270 int fsmStage(/*@partial@*/ FSM_t fsm, fileStage stage)
00271         /*@modifies fsm, fileSystem @*/;
00272 
00273 #ifdef __cplusplus
00274 }
00275 #endif
00276 
00277 #endif  /* H_FSM */

Generated on Sun Mar 19 21:22:50 2006 for rpm by  doxygen 1.4.6