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