1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
/* parsing routines for the counted string class. These
* routines provide generic parsing aid as well some fairly
* complex routines targeted toward specific needs.
*
* General information - read this:
* All routines work on a single CStr object, which must be supplied
* during construction. The parse class keeps an internal pointer of
* where the next parse operation is to start (you could also say
* this is where the last parse operation stopped).
*
* Each parse operation carried out by this package starts from the
* parse pointer, parses the caller-requested element (e.g. an
* integer or delemited string) and the update the parse pointer. If
* the caller tries to parse beyond the end of the original string,
* an error is returned. In general, all functions return a parsRet
* error code and all require the parseObj to be the first parameter.
* The to-be-parsed string provided to the parse object MUST NOT be
* freed or modified by the caller during the lifetime of the parse
* object. However, the caller must free it when it is no longer needed.
* Optinally, the parse object can be instructed to do that. All objects
* returned by the parse routines must be freed by the caller. For
* simpler data types (like integers), the caller must provide the
* necessary buffer space.
*
* begun 2005-09-09 rgerhards
*
* Copyright (C) 2005 by Rainer Gerhards and Adiscon GmbH
*
* This file is part of rsyslog.
*
* Rsyslog is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rsyslog is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Rsyslog. If not, see <http://www.gnu.org/licenses/>.
*
* A copy of the GPL can be found in the file "COPYING" in this distribution.
*/
#ifndef _PARSE_H_INCLUDED__
#define _PARSE_H_INCLUDED__ 1
#include "stringbuf.h"
/**
* The parse object
*/
struct rsParsObject
{
#ifndef NDEBUG
rsObjID OID; /**< object ID */
#endif
cstr_t *pCStr; /**< pointer to the string object we are parsing */
int iCurrPos; /**< current parsing position (char offset) */
};
typedef struct rsParsObject rsParsObj;
/* BEGIN "inline"-like functions */
/* END "inline"-like functions */
int rsParsGetParsePointer(rsParsObj *pThis);
/**
* Construct a rsPars object.
*/
rsRetVal rsParsConstruct(rsParsObj **ppThis);
rsRetVal rsParsAssignString(rsParsObj *pThis, cstr_t *pCStr);
/* parse an integer. The parse pointer is advanced */
rsRetVal parsInt(rsParsObj *pThis, int* pInt);
/* Skip whitespace. Often used to trim parsable entries. */
rsRetVal parsSkipWhitespace(rsParsObj *pThis, sbool bRequireOne);
/* Parse string up to a delimiter.
*
* Input:
* cDelim - the delimiter
* The following two are for whitespace stripping,
* 0 means "no", 1 "yes"
* - bTrimLeading
* - bTrimTrailing
*
* Output:
* ppCStr Pointer to the parsed string
*/
rsRetVal parsDelimCStr(rsParsObj *pThis, cstr_t **ppCStr, char cDelim, int bTrimLeading, int bTrimTrailing, int bConvLower);
rsRetVal parsSkipAfterChar(rsParsObj *pThis, char c);
rsRetVal parsQuotedCStr(rsParsObj *pThis, cstr_t **ppCStr);
rsRetVal rsParsConstructFromSz(rsParsObj **ppThis, unsigned char *psz);
rsRetVal rsParsDestruct(rsParsObj *pThis);
int parsIsAtEndOfParseString(rsParsObj *pThis);
int parsGetCurrentPosition(rsParsObj *pThis);
char parsPeekAtCharAtParsPtr(rsParsObj *pThis);
#ifdef SYSLOG_INET
rsRetVal parsAddrWithBits(rsParsObj *pThis, netAddr_t **pIP, int *pBits);
#endif
#endif
/* vim:set ai:
*/
|