[BACK]Return to direntry.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / fs / msdosfs

Annotation of src/sys/fs/msdosfs/direntry.h, Revision 1.3

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

CVSweb <webmaster@jp.NetBSD.org>