dpkg 1.21.11
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 <stdint.h>
27
28#include <dpkg/error.h>
29
31
38struct fieldinfo;
39
48};
49
54 struct varbuf errmsg;
55 struct pkginfo *pkg;
56 struct pkgbin *pkgbin;
57 char *data;
58 char *dataptr;
59 char *endptr;
60 const char *filename;
61 int fd;
62 int lno;
63};
64
65#define parse_at_eof(ps) ((ps)->dataptr >= (ps)->endptr)
66#define parse_getc(ps) *(ps)->dataptr++
67#define parse_ungetc(c, ps) (ps)->dataptr--
68
70 const char *fieldstart;
71 const char *valuestart;
72 struct varbuf value;
76};
77
78struct parsedb_state *
79parsedb_new(const char *filename, int fd, enum parsedbflags flags);
80struct parsedb_state *
81parsedb_open(const char *filename, enum parsedbflags flags);
82void
83parsedb_load(struct parsedb_state *ps);
84int
85parsedb_parse(struct parsedb_state *ps, struct pkginfo **pkgp);
86void
88
89typedef void parse_field_func(struct parsedb_state *ps, struct field_state *fs,
90 void *parse_obj);
91
92bool parse_stanza(struct parsedb_state *ps, struct field_state *fs,
93 parse_field_func *parse_field, void *parse_obj);
94
95#define STRUCTFIELD(klass, off, type) (*(type *)((uintptr_t)(klass) + (off)))
96
97#define PKGIFPOFF(f) (offsetof(struct pkgbin, f))
98#define ARCHIVEFOFF(f) (offsetof(struct archivedetails, f))
99
100typedef void freadfunction(struct pkginfo *pkg, struct pkgbin *pkgbin,
101 struct parsedb_state *ps,
102 const char *value, const struct fieldinfo *fip);
120
124};
125
126typedef void fwritefunction(struct varbuf*,
127 const struct pkginfo *, const struct pkgbin *,
128 enum fwriteflags flags, const struct fieldinfo*);
135
136void
137varbuf_add_arbfield(struct varbuf *vb, const struct arbitraryfield *arbfield,
138 enum fwriteflags flags);
139
140#define FIELD(name) name, sizeof(name) - 1
141
142struct fieldinfo {
143 const char *name;
144 size_t namelen;
147 size_t integer;
148};
149
150int
152 struct dpkg_version *version, const char *value)
154
155void parse_error(struct parsedb_state *ps, const char *fmt, ...)
157void parse_warn(struct parsedb_state *ps, const char *fmt, ...)
159void
160parse_problem(struct parsedb_state *ps, const char *fmt, ...)
162
164 const char *value, const char *what);
166 const char **value, const char *what);
167
168#define MSDOS_EOF_CHAR '\032' /* ^Z */
169
170extern const struct fieldinfo fieldinfos[];
171
175
176#endif /* LIBDPKG_PARSEDUMP_H */
parsedbflags
Definition: dpkg-db.h:333
#define DPKG_ATTR_REQRET
Definition: macros.h:65
#define DPKG_BEGIN_DECLS
Definition: macros.h:86
#define DPKG_ATTR_PRINTF(n)
Definition: macros.h:56
#define DPKG_END_DECLS
Definition: macros.h:87
#define DPKG_ATTR_NORET
Definition: macros.h:55
#define DPKG_BIT(n)
Return the integer value of bit n.
Definition: macros.h:125
fwritefunction w_dependency
Definition: parsedump.h:130
fwritefunction w_charfield
Definition: parsedump.h:129
void parsedb_load(struct parsedb_state *ps)
Load data for package deb822 style parsing.
Definition: parse.c:574
freadfunction f_configversion
Definition: parsedump.h:115
void parse_field_func(struct parsedb_state *ps, struct field_state *fs, void *parse_obj)
Definition: parsedump.h:89
fwritefunction w_priority
Definition: parsedump.h:129
fwritefunction w_version
Definition: parsedump.h:130
void parse_ensure_have_field(struct parsedb_state *ps, const char **value, const char *what)
Definition: parsehelp.c:332
freadfunction f_charfield
Definition: parsedump.h:104
fwritefunction w_null
Definition: parsedump.h:130
freadfunction f_conffiles
Definition: parsedump.h:111
int parsedb_parse(struct parsedb_state *ps, struct pkginfo **pkgp)
Parse deb822 style package data from a buffer.
Definition: parse.c:769
freadfunction f_trigaw
Definition: parsedump.h:118
freadfunction f_version
Definition: parsedump.h:112
fwritefunction w_section
Definition: parsedump.h:129
fwritefunction w_trigpend
Definition: parsedump.h:133
void fwritefunction(struct varbuf *, const struct pkginfo *, const struct pkgbin *, enum fwriteflags flags, const struct fieldinfo *)
Definition: parsedump.h:126
freadfunction f_architecture
Definition: parsedump.h:117
freadfunction f_archives
Definition: parsedump.h:119
freadfunction f_status
Definition: parsedump.h:108
fwriteflags
Definition: parsedump.h:121
freadfunction f_dependency
Definition: parsedump.h:110
fwritefunction w_status
Definition: parsedump.h:129
freadfunction f_priority
Definition: parsedump.h:105
freadfunction f_name
Definition: parsedump.h:103
fwritefunction w_trigaw
Definition: parsedump.h:133
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:524
fwritefunction w_name
Definition: parsedump.h:129
freadfunction f_boolean
Definition: parsedump.h:109
void parsedb_close(struct parsedb_state *ps)
Teardown a package deb822 parser context.
Definition: parse.c:741
freadfunction f_trigpend
Definition: parsedump.h:118
fwritefunction w_architecture
Definition: parsedump.h:132
freadfunction f_obs_revision
Definition: parsedump.h:113
fwritefunction w_archives
Definition: parsedump.h:134
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:619
fwritefunction w_multiarch
Definition: parsedump.h:131
fwritefunction w_conffiles
Definition: parsedump.h:130
fwritefunction w_booleandefno
Definition: parsedump.h:130
void varbuf_add_arbfield(struct varbuf *vb, const struct arbitraryfield *arbfield, enum fwriteflags flags)
Definition: dump.c:453
freadfunction f_section
Definition: parsedump.h:107
void parse_problem(struct parsedb_state *ps, const char *fmt,...) DPKG_ATTR_PRINTF(2)
Definition: parsehelp.c:83
parsedbtype
Parse action.
Definition: parsedump.h:43
void parse_must_have_field(struct parsedb_state *ps, const char *value, const char *what)
Definition: parsehelp.c:322
fwritefunction w_configversion
Definition: parsedump.h:129
freadfunction f_obs_dependency
Definition: parsedump.h:114
freadfunction f_multiarch
Definition: parsedump.h:116
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:306
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:106
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:100
struct parsedb_state * parsedb_open(const char *filename, enum parsedbflags flags)
Open a file for deb822 parsing.
Definition: parse.c:549
@ fw_printheader
Print field header and trailing newline.
Definition: parsedump.h:123
@ pdb_file_update
Definition: parsedump.h:44
@ pdb_file_available
Definition: parsedump.h:47
@ pdb_file_status
Definition: parsedump.h:45
@ pdb_file_control
Definition: parsedump.h:46
Definition: dpkg-db.h:74
Definition: error.h:42
Data structure representing a Debian version.
Definition: version.h:42
Definition: parsedump.h:69
const char * valuestart
Definition: parsedump.h:71
const char * fieldstart
Definition: parsedump.h:70
int valuelen
Definition: parsedump.h:74
struct varbuf value
Definition: parsedump.h:72
int * fieldencountered
Definition: parsedump.h:75
int fieldlen
Definition: parsedump.h:73
Definition: parsedump.h:142
size_t namelen
Definition: parsedump.h:144
freadfunction * rcall
Definition: parsedump.h:145
const char * name
Definition: parsedump.h:143
size_t integer
Definition: parsedump.h:147
fwritefunction * wcall
Definition: parsedump.h:146
Definition: parsedump.h:50
enum parsedbflags flags
Definition: parsedump.h:52
struct pkginfo * pkg
Definition: parsedump.h:55
char * data
Definition: parsedump.h:57
enum parsedbtype type
Definition: parsedump.h:51
char * endptr
Definition: parsedump.h:59
struct pkgbin * pkgbin
Definition: parsedump.h:56
struct varbuf errmsg
Definition: parsedump.h:54
char * dataptr
Definition: parsedump.h:58
int lno
Definition: parsedump.h:62
struct dpkg_error err
Definition: parsedump.h:53
int fd
Definition: parsedump.h:61
const char * filename
Definition: parsedump.h:60
Node describing a binary package file.
Definition: dpkg-db.h:108
Node describing an architecture package instance.
Definition: dpkg-db.h:198
varbuf_init must be called exactly once before the use of each varbuf (including before any call to v...
Definition: varbuf.h:55