[9] | 1 | #ifndef MTOOLS_VFAT_H
|
---|
| 2 | #define MTOOLS_VFAT_H
|
---|
| 3 |
|
---|
| 4 | #include "msdos.h"
|
---|
| 5 |
|
---|
| 6 | /*
|
---|
| 7 | * VFAT-related common header file
|
---|
| 8 | */
|
---|
| 9 | #define VFAT_SUPPORT
|
---|
| 10 |
|
---|
| 11 | struct unicode_char {
|
---|
| 12 | char lchar;
|
---|
| 13 | char uchar;
|
---|
| 14 | };
|
---|
| 15 |
|
---|
| 16 |
|
---|
| 17 | /* #define MAX_VFAT_SUBENTRIES 32 */ /* Theoretical max # of VSEs */
|
---|
| 18 | #define MAX_VFAT_SUBENTRIES 20 /* Max useful # of VSEs */
|
---|
| 19 | #define VSE_NAMELEN 13
|
---|
| 20 |
|
---|
| 21 | #define VSE1SIZE 5
|
---|
| 22 | #define VSE2SIZE 6
|
---|
| 23 | #define VSE3SIZE 2
|
---|
| 24 |
|
---|
| 25 | #include "stream.h"
|
---|
| 26 |
|
---|
| 27 | struct vfat_subentry {
|
---|
| 28 | unsigned char id; /* 0x40 = last; & 0x1f = VSE ID */
|
---|
| 29 | struct unicode_char text1[VSE1SIZE] PACKED;
|
---|
| 30 | unsigned char attribute; /* 0x0f for VFAT */
|
---|
| 31 | unsigned char hash1; /* Always 0? */
|
---|
| 32 | unsigned char sum; /* Checksum of short name */
|
---|
| 33 | struct unicode_char text2[VSE2SIZE] PACKED;
|
---|
| 34 | unsigned char sector_l; /* 0 for VFAT */
|
---|
| 35 | unsigned char sector_u; /* 0 for VFAT */
|
---|
| 36 | struct unicode_char text3[VSE3SIZE] PACKED;
|
---|
| 37 | };
|
---|
| 38 |
|
---|
| 39 | /* Enough size for a worst case number of full VSEs plus a null */
|
---|
| 40 | #define VBUFSIZE ((MAX_VFAT_SUBENTRIES*VSE_NAMELEN) + 1)
|
---|
| 41 |
|
---|
| 42 | /* Max legal length of a VFAT long name */
|
---|
| 43 | #define MAX_VNAMELEN (255)
|
---|
| 44 |
|
---|
| 45 | #define VSE_PRESENT 0x01
|
---|
| 46 | #define VSE_LAST 0x40
|
---|
| 47 | #define VSE_MASK 0x1f
|
---|
| 48 |
|
---|
| 49 | struct vfat_state {
|
---|
| 50 | char name[VBUFSIZE];
|
---|
| 51 | int status; /* is now a bit map of 32 bits */
|
---|
| 52 | int subentries;
|
---|
| 53 | unsigned char sum; /* no need to remember the sum for each entry,
|
---|
| 54 | * it is the same anyways */
|
---|
| 55 | int present;
|
---|
| 56 | };
|
---|
| 57 |
|
---|
| 58 |
|
---|
| 59 | struct scan_state {
|
---|
| 60 | int match_free;
|
---|
| 61 | int shortmatch;
|
---|
| 62 | int longmatch;
|
---|
| 63 | int free_start;
|
---|
| 64 | int free_end;
|
---|
| 65 | int slot;
|
---|
| 66 | int got_slots;
|
---|
| 67 | int size_needed;
|
---|
| 68 | int max_entry;
|
---|
| 69 | };
|
---|
| 70 |
|
---|
| 71 | #include "mtoolsDirent.h"
|
---|
| 72 |
|
---|
| 73 | void clear_vfat(struct vfat_state *);
|
---|
| 74 | int unicode_write(char *, struct unicode_char *, int num, int *end);
|
---|
| 75 |
|
---|
| 76 | int clear_vses(Stream_t *, int, size_t);
|
---|
| 77 | void autorename_short(char *, int);
|
---|
| 78 | void autorename_long(char *, int);
|
---|
| 79 |
|
---|
| 80 | int lookupForInsert(Stream_t *Dir,
|
---|
| 81 | char *dosname,
|
---|
| 82 | char *longname,
|
---|
| 83 | struct scan_state *ssp,
|
---|
| 84 | int ignore_entry,
|
---|
| 85 | int source_entry,
|
---|
| 86 | int pessimisticShortRename);
|
---|
| 87 |
|
---|
| 88 | #define DO_OPEN 1 /* open all files that are found */
|
---|
| 89 | #define ACCEPT_LABEL 0x08
|
---|
| 90 | #define ACCEPT_DIR 0x10
|
---|
| 91 | #define ACCEPT_PLAIN 0x20
|
---|
| 92 | #define MATCH_ANY 0x40
|
---|
| 93 | #define NO_MSG 0x80
|
---|
| 94 | #define NO_DOTS 0x100 /* accept no dots if matched by wildcard */
|
---|
| 95 | #define DO_OPEN_DIRS 0x400 /* open all directories that are found */
|
---|
| 96 | #define OPEN_PARENT 0x1000 /* in target lookup, open parent
|
---|
| 97 | * instead of file itself */
|
---|
| 98 | #define NO_UNIX 0x2000 /* in target lookup, consider all files to reside on
|
---|
| 99 | * the DOS fs */
|
---|
| 100 | #endif
|
---|