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
59 PINFCACHESECTION FirstSection
;
60 PINFCACHESECTION LastSection
;
62 PINFCACHESECTION StringsSection
;
63 } INFCACHE
, *PINFCACHE
;
65 typedef struct _INFCONTEXT
68 PINFCACHESECTION Section
;
72 typedef int INFSTATUS
;
74 /* FUNCTIONS ****************************************************************/
76 extern INFSTATUS
InfpParseBuffer(PINFCACHE file
,
80 extern PINFCACHESECTION
InfpFreeSection(PINFCACHESECTION Section
);
81 extern PINFCACHESECTION
InfpAddSection(PINFCACHE Cache
,
83 extern PINFCACHELINE
InfpAddLine(PINFCACHESECTION Section
);
84 extern PVOID
InfpAddKeyToLine(PINFCACHELINE Line
,
86 extern PVOID
InfpAddFieldToLine(PINFCACHELINE Line
,
88 extern PINFCACHELINE
InfpFindKeyLine(PINFCACHESECTION Section
,
90 extern PINFCACHESECTION
InfpFindSection(PINFCACHE Cache
,
93 extern INFSTATUS
InfpBuildFileBuffer(PINFCACHE InfHandle
,
97 extern INFSTATUS
InfpFindFirstLine(PINFCACHE InfHandle
,
100 PINFCONTEXT
*Context
);
101 extern INFSTATUS
InfpFindNextLine(PINFCONTEXT ContextIn
,
102 PINFCONTEXT ContextOut
);
103 extern INFSTATUS
InfpFindFirstMatchLine(PINFCONTEXT ContextIn
,
105 PINFCONTEXT ContextOut
);
106 extern INFSTATUS
InfpFindNextMatchLine(PINFCONTEXT ContextIn
,
108 PINFCONTEXT ContextOut
);
109 extern LONG
InfpGetLineCount(HINF InfHandle
,
111 extern LONG
InfpGetFieldCount(PINFCONTEXT Context
);
112 extern INFSTATUS
InfpGetBinaryField(PINFCONTEXT Context
,
115 ULONG ReturnBufferSize
,
116 PULONG RequiredSize
);
117 extern INFSTATUS
InfpGetIntField(PINFCONTEXT Context
,
120 extern INFSTATUS
InfpGetMultiSzField(PINFCONTEXT Context
,
123 ULONG ReturnBufferSize
,
124 PULONG RequiredSize
);
125 extern INFSTATUS
InfpGetStringField(PINFCONTEXT Context
,
128 ULONG ReturnBufferSize
,
129 PULONG RequiredSize
);
130 extern INFSTATUS
InfpGetData(PINFCONTEXT Context
,
133 extern INFSTATUS
InfpGetDataField(PINFCONTEXT Context
,
137 extern INFSTATUS
InfpFindOrAddSection(PINFCACHE Cache
,
139 PINFCONTEXT
*Context
);
140 extern INFSTATUS
InfpAddLineWithKey(PINFCONTEXT Context
, PCWSTR Key
);
141 extern INFSTATUS
InfpAddField(PINFCONTEXT Context
, PCWSTR Data
);
143 extern VOID
InfpFreeContext(PINFCONTEXT Context
);