dpkg 1.22.7-3-g89f48
Loading...
Searching...
No Matches
parsedump.h
Go to the documentation of this file.
1/*
2 * libdpkg - Debian packaging suite library routines
3 * parsedump.h - declarations for in-core database reading/writing
4 *
5 * Copyright © 1995 Ian Jackson <ijackson@chiark.greenend.org.uk>
6 * Copyright © 2001 Wichert Akkerman
7 * Copyright © 2008-2011 Guillem Jover <guillem@debian.org>
8 *
9 * This is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 */
22
23#ifndef LIBDPKG_PARSEDUMP_H
24#define LIBDPKG_PARSEDUMP_H
25
26#include <stdbool.h>
27#include <stdint.h>
28
29#include <dpkg/error.h>
30#include <dpkg/dpkg-db.h>
31
33
40struct fieldinfo;
41
51
56 struct varbuf errmsg;
57 struct pkginfo *pkg;
58 struct pkgbin *pkgbin;
59 char *data;
60 char *dataptr;
61 char *endptr;
62 const char *filename;
63 int fd;
64 int lno;
65};
66
67#define parse_at_eof(ps) ((ps)->dataptr >= (ps)->endptr)
68#define parse_getc(ps) *(ps)->dataptr++
69#define parse_ungetc(c, ps) (ps)->dataptr--
70
72 const char *fieldstart;
73 const char *valuestart;
74 struct varbuf value;
78};
79
80struct parsedb_state *
81parsedb_new(const char *filename, int fd, enum parsedbflags flags);
82struct parsedb_state *
83parsedb_open(const char *filename, enum parsedbflags flags);
84void
86int
87parsedb_parse(struct parsedb_state *ps, struct pkginfo **pkgp);
88void
90
91typedef void parse_field_func(struct parsedb_state *ps, struct field_state *fs,
92 void *parse_obj);
93
94bool parse_stanza(struct parsedb_state *ps, struct field_state *fs,
96
97#define STRUCTFIELD(klass, off, type) (*(type *)((uintptr_t)(klass) + (off)))
98
99#define PKGIFPOFF(f) (offsetof(struct pkgbin, f))
100#define ARCHIVEFOFF(f) (offsetof(struct archivedetails, f))
101
102typedef void freadfunction(struct pkginfo *pkg, struct pkgbin *pkgbin,
103 struct parsedb_state *ps,
104 const char *value, const struct fieldinfo *fip);
122
129
130typedef void fwritefunction(struct varbuf*,
131 const struct pkginfo *, const struct pkgbin *,
132 enum fwriteflags flags, const struct fieldinfo*);
139
140void
142 enum fwriteflags flags);
143
144#define FIELD(name) name, sizeof(name) - 1
145
153
154int
156 struct dpkg_version *version, const char *value)
158
159void parse_error(struct parsedb_state *ps, const char *fmt, ...)
161void parse_warn(struct parsedb_state *ps, const char *fmt, ...)
163void
164parse_lax_problem(struct parsedb_state *ps, enum parsedbflags flags_lax,
165 const char *fmt, ...)
167void
168parse_problem(struct parsedb_state *ps, const char *fmt, ...)
170
172 const char *value, const char *what);
174 const char **value, const char *what);
175
176#define MSDOS_EOF_CHAR '\032' /* ^Z */
177
178extern const struct fieldinfo fieldinfos[];
179
183
184#endif /* LIBDPKG_PARSEDUMP_H */
enum DPKG_ATTR_ENUM_FLAGS parsedbflags
Definition dpkg-db.h:343
#define DPKG_ATTR_REQRET
Definition macros.h:130
#define DPKG_ATTR_ENUM_FLAGS
Definition macros.h:149
#define DPKG_BEGIN_DECLS
Definition macros.h:164
#define DPKG_ATTR_PRINTF(n)
Definition macros.h:117
#define DPKG_END_DECLS
Definition macros.h:165
#define DPKG_ATTR_NORET
Definition macros.h:108
#define DPKG_BIT(n)
Return the integer value of bit n.
Definition macros.h:203
fwritefunction w_dependency
Definition parsedump.h:134
fwritefunction w_charfield
Definition parsedump.h:133
void parsedb_load(struct parsedb_state *ps)
Load data for package deb822 style parsing.
Definition parse.c:573
freadfunction f_configversion
Definition parsedump.h:117
void parse_field_func(struct parsedb_state *ps, struct field_state *fs, void *parse_obj)
Definition parsedump.h:91
fwritefunction w_priority
Definition parsedump.h:133
fwritefunction w_version
Definition parsedump.h:134
void parse_ensure_have_field(struct parsedb_state *ps, const char **value, const char *what)
Definition parsehelp.c:348
freadfunction f_charfield
Definition parsedump.h:106
fwritefunction w_null
Definition parsedump.h:134
freadfunction f_conffiles
Definition parsedump.h:113
int parsedb_parse(struct parsedb_state *ps, struct pkginfo **pkgp)
Parse deb822 style package data from a buffer.
Definition parse.c:763
freadfunction f_trigaw
Definition parsedump.h:120
void parse_lax_problem(struct parsedb_state *ps, enum parsedbflags flags_lax, const char *fmt,...) DPKG_ATTR_PRINTF(3)
Definition parsehelp.c:83
freadfunction f_version
Definition parsedump.h:114
fwritefunction w_section
Definition parsedump.h:133
fwritefunction w_trigpend
Definition parsedump.h:137
void fwritefunction(struct varbuf *, const struct pkginfo *, const struct pkgbin *, enum fwriteflags flags, const struct fieldinfo *)
Definition parsedump.h:130
freadfunction f_architecture
Definition parsedump.h:119
freadfunction f_archives
Definition parsedump.h:121
freadfunction f_status
Definition parsedump.h:110
enum DPKG_ATTR_ENUM_FLAGS fwriteflags
Definition parsedump.h:123
freadfunction f_dependency
Definition parsedump.h:112
fwritefunction w_status
Definition parsedump.h:133
freadfunction f_priority
Definition parsedump.h:107
freadfunction f_name
Definition parsedump.h:105
fwritefunction w_trigaw
Definition parsedump.h:137
const struct fieldinfo fieldinfos[]
Fields information.
Definition parse.c:53
struct parsedb_state * parsedb_new(const char *filename, int fd, enum parsedbflags flags)
Create a new deb822 parser context.
Definition parse.c:523
fwritefunction w_name
Definition parsedump.h:133
freadfunction f_boolean
Definition parsedump.h:111
void parsedb_close(struct parsedb_state *ps)
Teardown a package deb822 parser context.
Definition parse.c:735
freadfunction f_trigpend
Definition parsedump.h:120
fwritefunction w_architecture
Definition parsedump.h:136
freadfunction f_obs_revision
Definition parsedump.h:115
fwritefunction w_archives
Definition parsedump.h:138
bool parse_stanza(struct parsedb_state *ps, struct field_state *fs, parse_field_func *parse_field, void *parse_obj)
Parse an RFC-822 style stanza.
Definition parse.c:617
fwritefunction w_multiarch
Definition parsedump.h:135
fwritefunction w_conffiles
Definition parsedump.h:134
fwritefunction w_booleandefno
Definition parsedump.h:134
void varbuf_add_arbfield(struct varbuf *vb, const struct arbitraryfield *arbfield, enum fwriteflags flags)
Definition dump.c:453
freadfunction f_section
Definition parsedump.h:109
void parse_problem(struct parsedb_state *ps, const char *fmt,...) DPKG_ATTR_PRINTF(2)
Definition parsehelp.c:100
parsedbtype
Parse action.
Definition parsedump.h:45
void parse_must_have_field(struct parsedb_state *ps, const char *value, const char *what)
Definition parsehelp.c:338
fwritefunction w_configversion
Definition parsedump.h:133
freadfunction f_obs_dependency
Definition parsedump.h:116
freadfunction f_multiarch
Definition parsedump.h:118
int parse_db_version(struct parsedb_state *ps, struct dpkg_version *version, const char *value) DPKG_ATTR_REQRET
Parse a version string coming from a database file.
Definition parsehelp.c:322
void parse_warn(struct parsedb_state *ps, const char *fmt,...) DPKG_ATTR_PRINTF(2)
Definition parsehelp.c:73
freadfunction f_obs_class
Definition parsedump.h:108
void parse_error(struct parsedb_state *ps, const char *fmt,...) DPKG_ATTR_NORET DPKG_ATTR_PRINTF(2)
Definition parsehelp.c:60
void freadfunction(struct pkginfo *pkg, struct pkgbin *pkgbin, struct parsedb_state *ps, const char *value, const struct fieldinfo *fip)
Definition parsedump.h:102
struct parsedb_state * parsedb_open(const char *filename, enum parsedbflags flags)
Open a file for deb822 parsing.
Definition parse.c:548
@ pdb_file_update
Definition parsedump.h:46
@ pdb_file_available
Definition parsedump.h:49
@ pdb_file_status
Definition parsedump.h:47
@ pdb_file_control
Definition parsedump.h:48
fw_printheader
Print field header and trailing newline.
Definition parsedump.h:127
fw_none
No flags.
Definition parsedump.h:125
Definition dpkg-db.h:74
Definition error.h:42
Data structure representing a Debian version.
Definition version.h:42
Definition parsedump.h:71
const char * valuestart
Definition parsedump.h:73
const char * fieldstart
Definition parsedump.h:72
int valuelen
Definition parsedump.h:76
struct varbuf value
Definition parsedump.h:74
int * fieldencountered
Definition parsedump.h:77
int fieldlen
Definition parsedump.h:75
Definition parsedump.h:146
size_t namelen
Definition parsedump.h:148
freadfunction * rcall
Definition parsedump.h:149
const char * name
Definition parsedump.h:147
size_t integer
Definition parsedump.h:151
fwritefunction * wcall
Definition parsedump.h:150
Definition parsedump.h:52
enum parsedbflags flags
Definition parsedump.h:54
struct pkginfo * pkg
Definition parsedump.h:57
char * data
Definition parsedump.h:59
enum parsedbtype type
Definition parsedump.h:53
char * endptr
Definition parsedump.h:61
struct pkgbin * pkgbin
Definition parsedump.h:58
struct varbuf errmsg
Definition parsedump.h:56
char * dataptr
Definition parsedump.h:60
int lno
Definition parsedump.h:64
struct dpkg_error err
Definition parsedump.h:55
int fd
Definition parsedump.h:63
const char * filename
Definition parsedump.h:62
Node describing a binary package file.
Definition dpkg-db.h:116
Node describing an architecture package instance.
Definition dpkg-db.h:206
varbuf_init must be called exactly once before the use of each varbuf (including before any call to v...
Definition varbuf.h:56