1 /* 2 * types.h - Misc type definitions not related to on-disk structure. 3 * Originated from the Linux-NTFS project. 4 * 5 * Copyright (c) 2000-2004 Anton Altaparmakov 6 * 7 * This program/include file is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License as published 9 * by the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program/include file is distributed in the hope that it will be 13 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program (in the main directory of the NTFS-3G 19 * distribution in the file COPYING); if not, write to the Free Software 20 * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23 #ifndef _NTFS_TYPES_H 24 #define _NTFS_TYPES_H 25 26 #ifdef HAVE_CONFIG_H 27 #include "config.h" 28 #endif 29 30 #if HAVE_STDINT_H || !HAVE_CONFIG_H 31 #include <stdint.h> 32 #endif 33 #ifdef HAVE_SYS_TYPES_H 34 #include <sys/types.h> 35 #endif 36 37 typedef uint8_t u8; /* Unsigned types of an exact size */ 38 typedef uint16_t u16; 39 typedef uint32_t u32; 40 typedef uint64_t u64; 41 42 typedef int8_t s8; /* Signed types of an exact size */ 43 typedef int16_t s16; 44 typedef int32_t s32; 45 typedef int64_t s64; 46 47 typedef u16 le16; 48 typedef u32 le32; 49 typedef u64 le64; 50 51 typedef u16 be16; 52 typedef u32 be32; 53 typedef u64 be64; 54 55 /* 56 * Declare s{l,b}e{16,32,64} to be unsigned because we do not want sign 57 * extension on BE architectures. 58 */ 59 typedef u16 sle16; 60 typedef u32 sle32; 61 typedef u64 sle64; 62 63 typedef u16 sbe16; 64 typedef u32 sbe32; 65 typedef u64 sbe64; 66 67 typedef le16 ntfschar; /* 2-byte Unicode character type. */ 68 #define UCHAR_T_SIZE_BITS 1 69 70 /* 71 * Clusters are signed 64-bit values on NTFS volumes. We define two types, LCN 72 * and VCN, to allow for type checking and better code readability. 73 */ 74 typedef s64 VCN; 75 typedef sle64 leVCN; 76 typedef s64 LCN; 77 typedef sle64 leLCN; 78 79 /* 80 * The NTFS journal $LogFile uses log sequence numbers which are signed 64-bit 81 * values. We define our own type LSN, to allow for type checking and better 82 * code readability. 83 */ 84 typedef s64 LSN; 85 typedef sle64 leLSN; 86 87 /* 88 * Cygwin has a collision between our BOOL and <windef.h>'s 89 * As long as this file will be included after <windows.h> were fine. 90 */ 91 #ifndef _WINDEF_H 92 /** 93 * enum BOOL - These are just to make the code more readable... 94 */ 95 typedef enum { 96 #ifndef FALSE 97 FALSE = 0, 98 #endif 99 #ifndef NO 100 NO = 0, 101 #endif 102 #ifndef ZERO 103 ZERO = 0, 104 #endif 105 #ifndef TRUE 106 TRUE = 1, 107 #endif 108 #ifndef YES 109 YES = 1, 110 #endif 111 #ifndef ONE 112 ONE = 1, 113 #endif 114 } BOOL; 115 #endif /* defined _WINDEF_H */ 116 117 /** 118 * enum IGNORE_CASE_BOOL - 119 */ 120 typedef enum { 121 CASE_SENSITIVE = 0, 122 IGNORE_CASE = 1, 123 } IGNORE_CASE_BOOL; 124 125 #define STATUS_OK (0) 126 #define STATUS_ERROR (-1) 127 #define STATUS_RESIDENT_ATTRIBUTE_FILLED_MFT (-2) 128 #define STATUS_KEEP_SEARCHING (-3) 129 #define STATUS_NOT_FOUND (-4) 130 131 /* 132 * Force alignment in a struct if required by processor 133 */ 134 union ALIGNMENT { 135 u64 u64align; 136 void *ptralign; 137 } ; 138 139 #endif /* defined _NTFS_TYPES_H */ 140 141