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>
9 #ifndef INFPRIV_H_INCLUDED
10 #define INFPRIV_H_INCLUDED
13 #define FIELD_OFFSET(t,f) ((ptrdiff_t)&(((t*)0)->f))
16 #define INF_STATUS_INSUFFICIENT_RESOURCES (0xC000009A)
17 #define INF_STATUS_BAD_SECTION_NAME_LINE (0xC0700001)
18 #define INF_STATUS_SECTION_NAME_TOO_LONG (0xC0700002)
19 #define INF_STATUS_WRONG_INF_STYLE (0xC0700003)
20 #define INF_STATUS_NOT_ENOUGH_MEMORY (0xC0700004)
22 typedef struct _INFCACHEFIELD
24 struct _INFCACHEFIELD
*Next
;
25 struct _INFCACHEFIELD
*Prev
;
28 } INFCACHEFIELD
, *PINFCACHEFIELD
;
30 typedef struct _INFCACHELINE
32 struct _INFCACHELINE
*Next
;
33 struct _INFCACHELINE
*Prev
;
39 PINFCACHEFIELD FirstField
;
40 PINFCACHEFIELD LastField
;
42 } INFCACHELINE
, *PINFCACHELINE
;
44 typedef struct _INFCACHESECTION
46 struct _INFCACHESECTION
*Next
;
47 struct _INFCACHESECTION
*Prev
;
49 PINFCACHELINE FirstLine
;
50 PINFCACHELINE LastLine
;
55 } INFCACHESECTION
, *PINFCACHESECTION
;
57 typedef struct _INFCACHE
59 PINFCACHESECTION FirstSection
;
60 PINFCACHESECTION LastSection
;
62 PINFCACHESECTION StringsSection
;
63 } INFCACHE
, *PINFCACHE
;
65 typedef struct _INFCONTEXT
68 PINFCACHESECTION Section
;
72 typedef long 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
, PCTSTR Key
);
141 extern INFSTATUS
InfpAddField(PINFCONTEXT Context
, PCTSTR Data
);
143 extern VOID
InfpFreeContext(PINFCONTEXT Context
);
145 #endif /* INFPRIV_H_INCLUDED */