Reactos
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at listview 156 lines 5.4 kB view raw
1/* 2 * PROJECT: .inf file parser 3 * LICENSE: GPL - See COPYING in the top level directory 4 * PROGRAMMER: Royce Mitchell III 5 * Eric Kohl 6 * Ge van Geldorp <gvg@reactos.org> 7 */ 8 9#pragma once 10 11#ifndef FIELD_OFFSET 12#define FIELD_OFFSET(t,f) ((ptrdiff_t)&(((t*)0)->f)) 13#endif 14 15#define INF_STATUS_INSUFFICIENT_RESOURCES ((INFSTATUS)0xC000009A) 16#define INF_STATUS_BAD_SECTION_NAME_LINE ((INFSTATUS)0xC0700001) 17#define INF_STATUS_SECTION_NAME_TOO_LONG ((INFSTATUS)0xC0700002) 18#define INF_STATUS_WRONG_INF_STYLE ((INFSTATUS)0xC0700003) 19#define INF_STATUS_NOT_ENOUGH_MEMORY ((INFSTATUS)0xC0700004) 20 21typedef struct _INFCACHEFIELD 22{ 23 struct _INFCACHEFIELD *Next; 24 struct _INFCACHEFIELD *Prev; 25 26 WCHAR Data[1]; 27} INFCACHEFIELD, *PINFCACHEFIELD; 28 29typedef struct _INFCACHELINE 30{ 31 struct _INFCACHELINE *Next; 32 struct _INFCACHELINE *Prev; 33 UINT Id; 34 35 LONG FieldCount; 36 37 PWCHAR Key; 38 39 PINFCACHEFIELD FirstField; 40 PINFCACHEFIELD LastField; 41 42} INFCACHELINE, *PINFCACHELINE; 43 44typedef struct _INFCACHESECTION 45{ 46 struct _INFCACHESECTION *Next; 47 struct _INFCACHESECTION *Prev; 48 49 PINFCACHELINE FirstLine; 50 PINFCACHELINE LastLine; 51 UINT Id; 52 53 LONG LineCount; 54 UINT NextLineId; 55 56 WCHAR Name[1]; 57} INFCACHESECTION, *PINFCACHESECTION; 58 59typedef struct _INFCACHE 60{ 61 LANGID LanguageId; 62 PINFCACHESECTION FirstSection; 63 PINFCACHESECTION LastSection; 64 UINT NextSectionId; 65 66 PINFCACHESECTION StringsSection; 67} INFCACHE, *PINFCACHE; 68 69typedef struct _INFCONTEXT 70{ 71 PINFCACHE Inf; 72 PINFCACHE CurrentInf; 73 UINT Section; 74 UINT Line; 75} INFCONTEXT; 76 77typedef int INFSTATUS; 78 79/* FUNCTIONS ****************************************************************/ 80 81extern INFSTATUS InfpParseBuffer(PINFCACHE file, 82 const WCHAR *buffer, 83 const WCHAR *end, 84 PULONG error_line); 85extern PINFCACHESECTION InfpFreeSection(PINFCACHESECTION Section); 86extern PINFCACHESECTION InfpAddSection(PINFCACHE Cache, 87 PCWSTR Name); 88extern PINFCACHELINE InfpAddLine(PINFCACHESECTION Section); 89extern PVOID InfpAddKeyToLine(PINFCACHELINE Line, 90 PCWSTR Key); 91extern PVOID InfpAddFieldToLine(PINFCACHELINE Line, 92 PCWSTR Data); 93extern PINFCACHELINE InfpFindKeyLine(PINFCACHESECTION Section, 94 PCWSTR Key); 95extern PINFCACHESECTION InfpFindSection(PINFCACHE Cache, 96 PCWSTR Section); 97 98extern INFSTATUS InfpBuildFileBuffer(PINFCACHE InfHandle, 99 PWCHAR *Buffer, 100 PULONG BufferSize); 101 102extern INFSTATUS InfpFindFirstLine(PINFCACHE InfHandle, 103 PCWSTR Section, 104 PCWSTR Key, 105 PINFCONTEXT *Context); 106extern INFSTATUS InfpFindNextLine(PINFCONTEXT ContextIn, 107 PINFCONTEXT ContextOut); 108extern INFSTATUS InfpFindFirstMatchLine(PINFCONTEXT ContextIn, 109 PCWSTR Key, 110 PINFCONTEXT ContextOut); 111extern INFSTATUS InfpFindNextMatchLine(PINFCONTEXT ContextIn, 112 PCWSTR Key, 113 PINFCONTEXT ContextOut); 114extern LONG InfpGetLineCount(HINF InfHandle, 115 PCWSTR Section); 116extern LONG InfpGetFieldCount(PINFCONTEXT Context); 117extern INFSTATUS InfpGetBinaryField(PINFCONTEXT Context, 118 ULONG FieldIndex, 119 PUCHAR ReturnBuffer, 120 ULONG ReturnBufferSize, 121 PULONG RequiredSize); 122extern INFSTATUS InfpGetIntField(PINFCONTEXT Context, 123 ULONG FieldIndex, 124 INT *IntegerValue); 125extern INFSTATUS InfpGetMultiSzField(PINFCONTEXT Context, 126 ULONG FieldIndex, 127 PWSTR ReturnBuffer, 128 ULONG ReturnBufferSize, 129 PULONG RequiredSize); 130extern INFSTATUS InfpGetStringField(PINFCONTEXT Context, 131 ULONG FieldIndex, 132 PWSTR ReturnBuffer, 133 ULONG ReturnBufferSize, 134 PULONG RequiredSize); 135extern INFSTATUS InfpGetData(PINFCONTEXT Context, 136 PWCHAR *Key, 137 PWCHAR *Data); 138extern INFSTATUS InfpGetDataField(PINFCONTEXT Context, 139 ULONG FieldIndex, 140 PWCHAR *Data); 141 142extern INFSTATUS InfpFindOrAddSection(PINFCACHE Cache, 143 PCWSTR Section, 144 PINFCONTEXT *Context); 145extern INFSTATUS InfpAddLineWithKey(PINFCONTEXT Context, PCWSTR Key); 146extern INFSTATUS InfpAddField(PINFCONTEXT Context, PCWSTR Data); 147 148extern VOID InfpFreeContext(PINFCONTEXT Context); 149PINFCACHELINE 150InfpFindLineById(PINFCACHESECTION Section, UINT Id); 151PINFCACHESECTION 152InfpGetSectionForContext(PINFCONTEXT Context); 153PINFCACHELINE 154InfpGetLineForContext(PINFCONTEXT Context); 155 156/* EOF */