2 * PROJECT: .inf file parser
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PROGRAMMER: Royce Mitchell III
6 * Ge van Geldorp <gvg@reactos.org>
12 #define FIELD_OFFSET(t,f) ((ptrdiff_t)&(((t*)0)->f))
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)
21 typedef struct _INFCACHEFIELD
23 struct _INFCACHEFIELD
*Next
;
24 struct _INFCACHEFIELD
*Prev
;
27 } INFCACHEFIELD
, *PINFCACHEFIELD
;
29 typedef struct _INFCACHELINE
31 struct _INFCACHELINE
*Next
;
32 struct _INFCACHELINE
*Prev
;
38 PINFCACHEFIELD FirstField
;
39 PINFCACHEFIELD LastField
;
41 } INFCACHELINE
, *PINFCACHELINE
;
43 typedef struct _INFCACHESECTION
45 struct _INFCACHESECTION
*Next
;
46 struct _INFCACHESECTION
*Prev
;
48 PINFCACHELINE FirstLine
;
49 PINFCACHELINE LastLine
;
54 } INFCACHESECTION
, *PINFCACHESECTION
;
56 typedef struct _INFCACHE
58 PINFCACHESECTION FirstSection
;
59 PINFCACHESECTION LastSection
;
61 PINFCACHESECTION StringsSection
;
62 } INFCACHE
, *PINFCACHE
;
64 typedef struct _INFCONTEXT
67 PINFCACHESECTION Section
;
71 typedef int INFSTATUS
;
73 /* FUNCTIONS ****************************************************************/
75 extern INFSTATUS
InfpParseBuffer(PINFCACHE file
,
79 extern PINFCACHESECTION
InfpFreeSection(PINFCACHESECTION Section
);
80 extern PINFCACHESECTION
InfpAddSection(PINFCACHE Cache
,
82 extern PINFCACHELINE
InfpAddLine(PINFCACHESECTION Section
);
83 extern PVOID
InfpAddKeyToLine(PINFCACHELINE Line
,
85 extern PVOID
InfpAddFieldToLine(PINFCACHELINE Line
,
87 extern PINFCACHELINE
InfpFindKeyLine(PINFCACHESECTION Section
,
89 extern PINFCACHESECTION
InfpFindSection(PINFCACHE Cache
,
92 extern INFSTATUS
InfpBuildFileBuffer(PINFCACHE InfHandle
,
96 extern INFSTATUS
InfpFindFirstLine(PINFCACHE InfHandle
,
99 PINFCONTEXT
*Context
);
100 extern INFSTATUS
InfpFindNextLine(PINFCONTEXT ContextIn
,
101 PINFCONTEXT ContextOut
);
102 extern INFSTATUS
InfpFindFirstMatchLine(PINFCONTEXT ContextIn
,
104 PINFCONTEXT ContextOut
);
105 extern INFSTATUS
InfpFindNextMatchLine(PINFCONTEXT ContextIn
,
107 PINFCONTEXT ContextOut
);
108 extern LONG
InfpGetLineCount(HINF InfHandle
,
110 extern LONG
InfpGetFieldCount(PINFCONTEXT Context
);
111 extern INFSTATUS
InfpGetBinaryField(PINFCONTEXT Context
,
114 ULONG ReturnBufferSize
,
115 PULONG RequiredSize
);
116 extern INFSTATUS
InfpGetIntField(PINFCONTEXT Context
,
119 extern INFSTATUS
InfpGetMultiSzField(PINFCONTEXT Context
,
122 ULONG ReturnBufferSize
,
123 PULONG RequiredSize
);
124 extern INFSTATUS
InfpGetStringField(PINFCONTEXT Context
,
127 ULONG ReturnBufferSize
,
128 PULONG RequiredSize
);
129 extern INFSTATUS
InfpGetData(PINFCONTEXT Context
,
132 extern INFSTATUS
InfpGetDataField(PINFCONTEXT Context
,
136 extern INFSTATUS
InfpFindOrAddSection(PINFCACHE Cache
,
138 PINFCONTEXT
*Context
);
139 extern INFSTATUS
InfpAddLineWithKey(PINFCONTEXT Context
, PCTSTR Key
);
140 extern INFSTATUS
InfpAddField(PINFCONTEXT Context
, PCTSTR Data
);
142 extern VOID
InfpFreeContext(PINFCONTEXT Context
);