types.h revision 9663:ace9a2ac3683
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 39typedef uint8_t u8; /* Unsigned types of an exact size */ 40typedef uint16_t u16; 41typedef uint32_t u32; 42typedef uint64_t u64; 43 44typedef int8_t s8; /* Signed types of an exact size */ 45typedef int16_t s16; 46typedef int32_t s32; 47typedef 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 61typedef u16 __bitwise le16; 62typedef u32 __bitwise le32; 63typedef 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 */ 69typedef u16 __bitwise sle16; 70typedef u32 __bitwise sle32; 71typedef u64 __bitwise sle64; 72 73typedef u16 __bitwise be16; 74typedef u32 __bitwise be32; 75typedef u64 __bitwise be64; 76 77typedef 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 */ 84typedef s64 VCN; 85typedef sle64 leVCN; 86typedef s64 LCN; 87typedef 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 */ 94typedef s64 LSN; 95typedef 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 */ 105typedef 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 */ 130typedef 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 143