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
69 PINFCACHESECTION Section
;
73 typedef int INFSTATUS
;
75 /* FUNCTIONS ****************************************************************/
77 extern INFSTATUS
InfpParseBuffer(PINFCACHE file
,
81 extern PINFCACHESECTION
InfpFreeSection(PINFCACHESECTION Section
);
82 extern PINFCACHESECTION
InfpAddSection(PINFCACHE Cache
,
84 extern PINFCACHELINE
InfpAddLine(PINFCACHESECTION Section
);
85 extern PVOID
InfpAddKeyToLine(PINFCACHELINE Line
,
87 extern PVOID
InfpAddFieldToLine(PINFCACHELINE Line
,
89 extern PINFCACHELINE
InfpFindKeyLine(PINFCACHESECTION Section
,
91 extern PINFCACHESECTION
InfpFindSection(PINFCACHE Cache
,
94 extern INFSTATUS
InfpBuildFileBuffer(PINFCACHE InfHandle
,
98 extern INFSTATUS
InfpFindFirstLine(PINFCACHE InfHandle
,
101 PINFCONTEXT
*Context
);
102 extern INFSTATUS
InfpFindNextLine(PINFCONTEXT ContextIn
,
103 PINFCONTEXT ContextOut
);
104 extern INFSTATUS
InfpFindFirstMatchLine(PINFCONTEXT ContextIn
,
106 PINFCONTEXT ContextOut
);
107 extern INFSTATUS
InfpFindNextMatchLine(PINFCONTEXT ContextIn
,
109 PINFCONTEXT ContextOut
);
110 extern LONG
InfpGetLineCount(HINF InfHandle
,
112 extern LONG
InfpGetFieldCount(PINFCONTEXT Context
);
113 extern INFSTATUS
InfpGetBinaryField(PINFCONTEXT Context
,
116 ULONG ReturnBufferSize
,
117 PULONG RequiredSize
);
118 extern INFSTATUS
InfpGetIntField(PINFCONTEXT Context
,
121 extern INFSTATUS
InfpGetMultiSzField(PINFCONTEXT Context
,
124 ULONG ReturnBufferSize
,
125 PULONG RequiredSize
);
126 extern INFSTATUS
InfpGetStringField(PINFCONTEXT Context
,
129 ULONG ReturnBufferSize
,
130 PULONG RequiredSize
);
131 extern INFSTATUS
InfpGetData(PINFCONTEXT Context
,
134 extern INFSTATUS
InfpGetDataField(PINFCONTEXT Context
,
138 extern INFSTATUS
InfpFindOrAddSection(PINFCACHE Cache
,
140 PINFCONTEXT
*Context
);
141 extern INFSTATUS
InfpAddLineWithKey(PINFCONTEXT Context
, PCWSTR Key
);
142 extern INFSTATUS
InfpAddField(PINFCONTEXT Context
, PCWSTR Data
);
144 extern VOID
InfpFreeContext(PINFCONTEXT Context
);