[BACK]Return to direntry.h CVS log [TXT][DIR] Up to [local] / sys / msdosfs

Annotation of sys/msdosfs/direntry.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: direntry.h,v 1.6 2002/03/14 01:27:09 millert Exp $    */
                      2: /*     $NetBSD: direntry.h,v 1.13 1997/10/17 11:23:45 ws Exp $ */
                      3:
                      4: /*-
                      5:  * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
                      6:  * Copyright (C) 1994, 1995, 1997 TooLs GmbH.
                      7:  * All rights reserved.
                      8:  * Original code by Paul Popelka (paulp@uts.amdahl.com) (see below).
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  * 3. All advertising materials mentioning features or use of this software
                     19:  *    must display the following acknowledgement:
                     20:  *     This product includes software developed by TooLs GmbH.
                     21:  * 4. The name of TooLs GmbH may not be used to endorse or promote products
                     22:  *    derived from this software without specific prior written permission.
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
                     25:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     26:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     27:  * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
                     28:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
                     29:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
                     30:  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
                     31:  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
                     32:  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
                     33:  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     34:  */
                     35: /*
                     36:  * Written by Paul Popelka (paulp@uts.amdahl.com)
                     37:  *
                     38:  * You can do anything you want with this software, just don't say you wrote
                     39:  * it, and don't remove this notice.
                     40:  *
                     41:  * This software is provided "as is".
                     42:  *
                     43:  * The author supplies this software to be publicly redistributed on the
                     44:  * understanding that the author is not responsible for the correct
                     45:  * functioning of this software in any circumstances and is not liable for
                     46:  * any damages caused by this software.
                     47:  *
                     48:  * October 1992
                     49:  */
                     50:
                     51: /*
                     52:  * Structure of a dos directory entry.
                     53:  */
                     54: struct direntry {
                     55:        u_int8_t        deName[8];      /* filename, blank filled */
                     56: #define        SLOT_EMPTY      0x00            /* slot has never been used */
                     57: #define        SLOT_E5         0x05            /* the real value is 0xe5 */
                     58: #define        SLOT_DELETED    0xe5            /* file in this slot deleted */
                     59:        u_int8_t        deExtension[3]; /* extension, blank filled */
                     60:        u_int8_t        deAttributes;   /* file attributes */
                     61: #define        ATTR_NORMAL     0x00            /* normal file */
                     62: #define        ATTR_READONLY   0x01            /* file is readonly */
                     63: #define        ATTR_HIDDEN     0x02            /* file is hidden */
                     64: #define        ATTR_SYSTEM     0x04            /* file is a system file */
                     65: #define        ATTR_VOLUME     0x08            /* entry is a volume label */
                     66: #define        ATTR_DIRECTORY  0x10            /* entry is a directory name */
                     67: #define        ATTR_ARCHIVE    0x20            /* file is new or modified */
                     68:        u_int8_t        deLowerCase;    /* case for base and extension */
                     69: #define        CASE_LOWER_BASE 0x08            /* base is lower case */
                     70: #define        CASE_LOWER_EXT  0x10            /* extension is lower case */
                     71:        u_int8_t        deCTimeHundredth; /* create time, 1/100th of a sec */
                     72:        u_int8_t        deCTime[2];     /* create time */
                     73:        u_int8_t        deCDate[2];     /* create date */
                     74:        u_int8_t        deADate[2];     /* access date */
                     75:        u_int8_t        deHighClust[2]; /* high byte of cluster number */
                     76:        u_int8_t        deMTime[2];     /* last update time */
                     77:        u_int8_t        deMDate[2];     /* last update date */
                     78:        u_int8_t        deStartCluster[2]; /* starting cluster of file */
                     79:        u_int8_t        deFileSize[4];  /* size of file in bytes */
                     80: };
                     81:
                     82: /*
                     83:  * Structure of a Win95 long name directory entry
                     84:  */
                     85: struct winentry {
                     86:        u_int8_t        weCnt;
                     87: #define        WIN_LAST        0x40
                     88: #define        WIN_CNT         0x3f
                     89:        u_int8_t        wePart1[10];
                     90:        u_int8_t        weAttributes;
                     91: #define        ATTR_WIN95      0x0f
                     92:        u_int8_t        weReserved1;
                     93:        u_int8_t        weChksum;
                     94:        u_int8_t        wePart2[12];
                     95:        u_int16_t       weReserved2;
                     96:        u_int8_t        wePart3[4];
                     97: };
                     98: #define        WIN_CHARS       13      /* Number of chars per winentry */
                     99:
                    100: /*
                    101:  * This is the format of the contents of the deTime field in the direntry
                    102:  * structure.
                    103:  * We don't use bitfields because we don't know how compilers for
                    104:  * arbitrary machines will lay them out.
                    105:  */
                    106: #define DT_2SECONDS_MASK       0x1F    /* seconds divided by 2 */
                    107: #define DT_2SECONDS_SHIFT      0
                    108: #define DT_MINUTES_MASK                0x7E0   /* minutes */
                    109: #define DT_MINUTES_SHIFT       5
                    110: #define DT_HOURS_MASK          0xF800  /* hours */
                    111: #define DT_HOURS_SHIFT         11
                    112:
                    113: /*
                    114:  * This is the format of the contents of the deDate field in the direntry
                    115:  * structure.
                    116:  */
                    117: #define DD_DAY_MASK            0x1F    /* day of month */
                    118: #define DD_DAY_SHIFT           0
                    119: #define DD_MONTH_MASK          0x1E0   /* month */
                    120: #define DD_MONTH_SHIFT         5
                    121: #define DD_YEAR_MASK           0xFE00  /* year - 1980 */
                    122: #define DD_YEAR_SHIFT          9
                    123:
                    124: #ifdef _KERNEL
                    125: void unix2dostime(struct timespec *tsp, u_int16_t *ddp, u_int16_t *dtp, u_int8_t *dhp);
                    126: void dos2unixtime(u_int dd, u_int dt, u_int dh, struct timespec *tsp);
                    127: int dos2unixfn(u_char dn[11], u_char *un, int lower);
                    128: int unix2dosfn(u_char *un, u_char dn[12], int unlen, u_int gen);
                    129: int unix2winfn(u_char *un, int unlen, struct winentry *wep, int cnt, int chksum);
                    130: int winChkName(u_char *un, int unlen, struct winentry *wep, int chksum);
                    131: int win2unixfn(struct winentry *wep, struct dirent *dp, int chksum);
                    132: u_int8_t winChksum(u_int8_t *name);
                    133: int winSlotCnt(u_char *un, int unlen);
                    134: #endif /* _KERNEL */

CVSweb