root/include/linux/umsdos_fs.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 #ifndef LINUX_UMSDOS_FS_H
   2 #define LINUX_UMSDOS_FS_H
   3 
   4 #define UMSDOS_VERSION  0
   5 #define UMSDOS_RELEASE  3
   6 
   7 #ifndef LINUX_FS_H
   8 #include <linux/fs.h>
   9 #endif
  10 
  11 /* This is the file acting as a directory extension */
  12 #define UMSDOS_EMD_FILE         "--linux-.---"
  13 #define UMSDOS_EMD_NAMELEN      12
  14 #define UMSDOS_PSDROOT_NAME     "linux"
  15 #define UMSDOS_PSDROOT_LEN      5
  16 
  17 struct umsdos_fake_info {
  18         char fname[13];
  19         int  len;
  20 };
  21 
  22 #define UMSDOS_MAXNAME  220
  23 /* This structure is 256 bytes large, depending on the name, only part */
  24 /* of it is written to disk */
  25 struct umsdos_dirent {
  26         unsigned char name_len; /* if == 0, then this entry is not used */
  27         unsigned char  flags;   /* UMSDOS_xxxx */
  28         unsigned short nlink;   /* How many hard links point to this entry */
  29         uid_t            uid;           /* Owner user id */
  30         gid_t            gid;           /* Group id */
  31         time_t          atime;          /* Access time */
  32         time_t          mtime;          /* Last modification time */
  33         time_t          ctime;          /* Creation time */
  34         dev_t           rdev;           /* major and minor number of a device */
  35                                                         /* special file */
  36         umode_t         mode;           /* Standard UNIX permissions bits + type of */
  37         char    spare[12];              /* unused bytes for future extensions */
  38                                                         /* file, see linux/stat.h */
  39         char name[UMSDOS_MAXNAME];      /* Not '\0' terminated */
  40                                                         /* but '\0' padded, so it will allow */
  41                                                         /* for adding news fields in this record */
  42                                                         /* by reducing the size of name[] */
  43 };
  44 #define UMSDOS_HIDDEN   1       /* Never show this entry in directory search */
  45 #define UMSDOS_HLINK    2       /* It is a (pseudo) hard link */
  46 
  47 /* #Specification: EMD file / record size
  48         Entry are 64 bytes wide in the EMD file. It allows for a 30 characters
  49         name. If a name is longer, contiguous entries are allocated. So a
  50         umsdos_dirent may span multiple records.
  51 */
  52 #define UMSDOS_REC_SIZE         64
  53 
  54 /* Translation between MSDOS name and UMSDOS name */
  55 struct umsdos_info{
  56         int msdos_reject;       /* Tell if the file name is invalid for MSDOS */
  57                                                 /* See umsdos_parse */
  58         struct umsdos_fake_info fake;
  59         struct umsdos_dirent entry;
  60         off_t f_pos;            /* offset of the entry in the EMD file */
  61                                                 /* or offset where the entry may be store */
  62                                                 /* if it is a new entry */
  63         int recsize;            /* Record size needed to store entry */
  64 };
  65 
  66 /* Definitions for ioctl (number randomly chosen) */
  67 /* The next ioctl commands operate only on the DOS directory */
  68 /* The file umsdos_progs/umsdosio.c contain a string table */
  69 /* based on the order of those definition. Keep it in sync */
  70 #define UMSDOS_READDIR_DOS      1234    /* Do a readdir of the DOS directory */
  71 #define UMSDOS_UNLINK_DOS       1235    /* Erase in the DOS directory only */
  72 #define UMSDOS_RMDIR_DOS        1236    /* rmdir in the DOS directory only */
  73 #define UMSDOS_STAT_DOS         1237    /* Get info about a file */
  74 /* The next ioctl commands operate only on the EMD file */
  75 #define UMSDOS_CREAT_EMD        1238    /* Create a file */
  76 #define UMSDOS_UNLINK_EMD       1239    /* unlink (rmdir) a file */
  77 #define UMSDOS_READDIR_EMD      1240    /* read the EMD file only. */
  78 #define UMSDOS_GETVERSION       1241    /* Get the release number of UMSDOS */
  79 #define UMSDOS_INIT_EMD         1242    /* Create the EMD file if not there */
  80 #define UMSDOS_DOS_SETUP        1243    /* Set the defaults of the MsDOS driver */
  81 
  82 struct umsdos_ioctl{
  83         struct dirent dos_dirent;
  84         struct umsdos_dirent umsdos_dirent;
  85         /* The following structure is used to exchange some data */
  86         /* with utilities (umsdos_progs/util/umsdosio.c). The first */
  87         /* releases were using struct stat from "sys/stat.h". This was */
  88         /* causing some problem for cross compilation of the kernel */
  89         /* Since I am not really using the structure stat, but only some field */
  90         /* of it, I have decided to replicate the structure here */
  91         /* for compatibility with the binaries out there */
  92         struct {
  93                 dev_t           st_dev;
  94                 unsigned short  __pad1;
  95                 ino_t           st_ino;
  96                 umode_t         st_mode;
  97                 nlink_t         st_nlink;
  98                 uid_t           st_uid;
  99                 gid_t           st_gid;
 100                 dev_t           st_rdev;
 101                 unsigned short  __pad2;
 102                 off_t           st_size;
 103                 unsigned long   st_blksize;
 104                 unsigned long   st_blocks;
 105                 time_t          st_atime;
 106                 unsigned long   __unused1;
 107                 time_t          st_mtime;
 108                 unsigned long   __unused2;
 109                 time_t          st_ctime;
 110                 unsigned long   __unused3;
 111                 unsigned long   __unused4;
 112                 unsigned long   __unused5;
 113         }stat;
 114         char version,release;
 115 };
 116 
 117 /* Different macros to access struct umsdos_dirent */
 118 #define EDM_ENTRY_ISUSED(e) ((e)->name_len!=0)
 119 
 120 #ifdef __KERNEL__
 121 
 122 extern struct inode_operations umsdos_dir_inode_operations;
 123 extern struct file_operations  umsdos_file_operations;
 124 extern struct inode_operations umsdos_file_inode_operations;
 125 extern struct inode_operations umsdos_file_inode_operations_no_bmap;
 126 extern struct inode_operations umsdos_symlink_inode_operations;
 127 
 128 #include <linux/umsdos_fs.p>
 129 
 130 #endif /* __KERNEL__ */
 131 
 132 #endif

/* [previous][next][first][last][top][bottom][index][help] */