Annotation of uae/src/include/fsdb.h, revision 1.1.1.1

1.1       root        1:  /*
                      2:   * UAE - The Un*x Amiga Emulator
                      3:   *
                      4:   * Library of functions to make emulated filesystem as independent as
                      5:   * possible of the host filesystem's capabilities.
                      6:   *
                      7:   * Copyright 1999 Bernd Schmidt
                      8:   */
                      9: 
                     10: #ifndef FSDB_FILE
                     11: #define FSDB_FILE "_UAEFSDB.___"
                     12: #endif
                     13: 
                     14: #ifndef FSDB_DIR_SEPARATOR
                     15: #define FSDB_DIR_SEPARATOR '/'
                     16: #endif
                     17: 
                     18: /* AmigaOS errors */
                     19: #define ERROR_NO_FREE_STORE            103
                     20: #define ERROR_OBJECT_IN_USE            202
                     21: #define ERROR_OBJECT_EXISTS            203
                     22: #define ERROR_DIR_NOT_FOUND            204
                     23: #define ERROR_OBJECT_NOT_FOUND         205
                     24: #define ERROR_ACTION_NOT_KNOWN         209
                     25: #define ERROR_INVALID_LOCK             211
                     26: #define ERROR_OBJECT_WRONG_TYPE                212
                     27: #define ERROR_DISK_WRITE_PROTECTED     214
                     28: #define ERROR_DIRECTORY_NOT_EMPTY      216
                     29: #define ERROR_DEVICE_NOT_MOUNTED       218
                     30: #define ERROR_SEEK_ERROR               219
                     31: #define ERROR_DISK_IS_FULL             221
                     32: #define ERROR_DELETE_PROTECTED         222
                     33: #define ERROR_WRITE_PROTECTED          223
                     34: #define ERROR_READ_PROTECTED           224
                     35: #define ERROR_NO_MORE_ENTRIES          232
                     36: #define ERROR_NOT_IMPLEMENTED          236
                     37: 
                     38: #define A_FIBF_SCRIPT  (1<<6)
                     39: #define A_FIBF_PURE    (1<<5)
                     40: #define A_FIBF_ARCHIVE (1<<4)
                     41: #define A_FIBF_READ    (1<<3)
                     42: #define A_FIBF_WRITE   (1<<2)
                     43: #define A_FIBF_EXECUTE (1<<1)
                     44: #define A_FIBF_DELETE  (1<<0)
                     45: 
                     46: /* AmigaOS "keys" */
                     47: typedef struct a_inode_struct {
                     48:     /* Circular list of recycleable a_inodes.  */
                     49:     struct a_inode_struct *next, *prev;
                     50:     /* This a_inode's relatives in the directory structure.  */
                     51:     struct a_inode_struct *parent;
                     52:     struct a_inode_struct *child, *sibling;
                     53:     /* AmigaOS name, and host OS name.  The host OS name is a full path, the
                     54:      * AmigaOS name is relative to the parent.  */
                     55:     char *aname;
                     56:     char *nname;
                     57:     /* AmigaOS file comment, or NULL if file has none.  */
                     58:     char *comment;
                     59:     /* AmigaOS protection bits.  */
                     60:     int amigaos_mode;
                     61:     /* Unique number for identification.  */
                     62:     uae_u32 uniq;
                     63:     /* AmigaOS locking bits.  */
                     64:     int shlock;
                     65:     unsigned int dir:1;
                     66:     unsigned int elock:1;
                     67:     /* Nonzero if this came from an entry in our database.  */
                     68:     unsigned int has_dbentry:1;
                     69:     /* Nonzero if this will need an entry in our database.  */
                     70:     unsigned int needs_dbentry:1;
                     71:     /* This a_inode possibly needs writing back to the database.  */
                     72:     unsigned int dirty:1;
                     73:     /* If nonzero, this represents a deleted file; the corresponding
                     74:      * entry in the database must be cleared.  */
                     75:     unsigned int deleted:1;
                     76: } a_inode;
                     77: 
                     78: extern char *nname_begin (char *);
                     79: 
                     80: extern char *build_nname (const char *d, const char *n);
                     81: extern char *build_aname (const char *d, const char *n);
                     82: 
                     83: /* Filesystem-independent functions.  */
                     84: extern void fsdb_clean_dir (a_inode *);
                     85: extern char *fsdb_search_dir (const char *dirname, char *rel);
                     86: extern void fsdb_dir_writeback (a_inode *);
                     87: extern int fsdb_used_as_nname (a_inode *base, const char *);
                     88: extern a_inode *fsdb_lookup_aino_aname (a_inode *base, const char *);
                     89: extern a_inode *fsdb_lookup_aino_nname (a_inode *base, const char *);
                     90: 
                     91: static __inline__ int same_aname (const char *an1, const char *an2)
                     92: {
                     93:     return strcasecmp (an1, an2) == 0;
                     94: }
                     95: 
                     96: /* Filesystem-dependent functions.  */
                     97: extern int fsdb_name_invalid (const char *n);
                     98: extern void fsdb_fill_file_attrs (a_inode *);
                     99: extern int fsdb_set_file_attrs (a_inode *, int);
                    100: extern int fsdb_mode_representable_p (const a_inode *);
                    101: extern char *fsdb_create_unique_nname (a_inode *base, const char *);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.