dpkg 1.21.11
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
In-core package database parsing and reading
Collaboration diagram for In-core package database parsing and reading:

Data Structures

struct  parsedb_state
 
struct  field_state
 
struct  fieldinfo
 

Macros

#define parse_at_eof(ps)   ((ps)->dataptr >= (ps)->endptr)
 
#define parse_getc(ps)   *(ps)->dataptr++
 
#define parse_ungetc(c, ps)   (ps)->dataptr--
 
#define STRUCTFIELD(klass, off, type)   (*(type *)((uintptr_t)(klass) + (off)))
 
#define PKGIFPOFF(f)   (offsetof(struct pkgbin, f))
 
#define ARCHIVEFOFF(f)   (offsetof(struct archivedetails, f))
 
#define FIELD(name)   name, sizeof(name) - 1
 
#define MSDOS_EOF_CHAR   '\032' /* ^Z */
 

Typedefs

typedef void parse_field_func(struct parsedb_state *ps, struct field_state *fs, void *parse_obj)
 
typedef void freadfunction(struct pkginfo *pkg, struct pkgbin *pkgbin, struct parsedb_state *ps, const char *value, const struct fieldinfo *fip)
 
typedef void fwritefunction(struct varbuf *, const struct pkginfo *, const struct pkgbin *, enum fwriteflags flags, const struct fieldinfo *)
 

Enumerations

enum  parsedbtype { pdb_file_update , pdb_file_status , pdb_file_control , pdb_file_available }
 Parse action. More...
 
enum  fwriteflags { fw_printheader = DPKG_BIT(0) }
 

Functions

struct parsedb_stateparsedb_new (const char *filename, int fd, enum parsedbflags flags)
 Create a new deb822 parser context. More...
 
struct parsedb_stateparsedb_open (const char *filename, enum parsedbflags flags)
 Open a file for deb822 parsing. More...
 
void parsedb_load (struct parsedb_state *ps)
 Load data for package deb822 style parsing. More...
 
int parsedb_parse (struct parsedb_state *ps, struct pkginfo **pkgp)
 Parse deb822 style package data from a buffer. More...
 
void parsedb_close (struct parsedb_state *ps)
 Teardown a package deb822 parser context. More...
 
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. More...
 
void varbuf_add_arbfield (struct varbuf *vb, const struct arbitraryfield *arbfield, enum fwriteflags flags)
 
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. More...
 
void parse_error (struct parsedb_state *ps, const char *fmt,...) DPKG_ATTR_NORET DPKG_ATTR_PRINTF(2)
 
void parse_warn (struct parsedb_state *ps, const char *fmt,...) DPKG_ATTR_PRINTF(2)
 
void parse_problem (struct parsedb_state *ps, const char *fmt,...) DPKG_ATTR_PRINTF(2)
 
void parse_must_have_field (struct parsedb_state *ps, const char *value, const char *what)
 
void parse_ensure_have_field (struct parsedb_state *ps, const char **value, const char *what)
 

Variables

freadfunction f_name
 
freadfunction f_charfield
 
freadfunction f_priority
 
freadfunction f_obs_class
 
freadfunction f_section
 
freadfunction f_status
 
freadfunction f_boolean
 
freadfunction f_dependency
 
freadfunction f_conffiles
 
freadfunction f_version
 
freadfunction f_obs_revision
 
freadfunction f_obs_dependency
 
freadfunction f_configversion
 
freadfunction f_multiarch
 
freadfunction f_architecture
 
freadfunction f_trigpend
 
freadfunction f_trigaw
 
freadfunction f_archives
 
fwritefunction w_name
 
fwritefunction w_charfield
 
fwritefunction w_priority
 
fwritefunction w_section
 
fwritefunction w_status
 
fwritefunction w_configversion
 
fwritefunction w_version
 
fwritefunction w_null
 
fwritefunction w_booleandefno
 
fwritefunction w_dependency
 
fwritefunction w_conffiles
 
fwritefunction w_multiarch
 
fwritefunction w_architecture
 
fwritefunction w_trigpend
 
fwritefunction w_trigaw
 
fwritefunction w_archives
 
const struct fieldinfo fieldinfos []
 Fields information. More...
 

Detailed Description

Macro Definition Documentation

◆ ARCHIVEFOFF

#define ARCHIVEFOFF (   f)    (offsetof(struct archivedetails, f))

◆ FIELD

#define FIELD (   name)    name, sizeof(name) - 1

◆ MSDOS_EOF_CHAR

#define MSDOS_EOF_CHAR   '\032' /* ^Z */

◆ parse_at_eof

#define parse_at_eof (   ps)    ((ps)->dataptr >= (ps)->endptr)

◆ parse_getc

#define parse_getc (   ps)    *(ps)->dataptr++

◆ parse_ungetc

#define parse_ungetc (   c,
  ps 
)    (ps)->dataptr--

◆ PKGIFPOFF

#define PKGIFPOFF (   f)    (offsetof(struct pkgbin, f))

◆ STRUCTFIELD

#define STRUCTFIELD (   klass,
  off,
  type 
)    (*(type *)((uintptr_t)(klass) + (off)))

Typedef Documentation

◆ freadfunction

typedef void freadfunction(struct pkginfo *pkg, struct pkgbin *pkgbin, struct parsedb_state *ps, const char *value, const struct fieldinfo *fip)

◆ fwritefunction

typedef void fwritefunction(struct varbuf *, const struct pkginfo *, const struct pkgbin *, enum fwriteflags flags, const struct fieldinfo *)

◆ parse_field_func

typedef void parse_field_func(struct parsedb_state *ps, struct field_state *fs, void *parse_obj)

Enumeration Type Documentation

◆ fwriteflags

Enumerator
fw_printheader 

Print field header and trailing newline.

◆ parsedbtype

Parse action.

Enumerator
pdb_file_update 
pdb_file_status 
pdb_file_control 
pdb_file_available 

Function Documentation

◆ parse_db_version()

int parse_db_version ( struct parsedb_state ps,
struct dpkg_version version,
const char *  value 
)

Parse a version string coming from a database file.

It parses a version string, and prints a warning or an error depending on the parse options.

Parameters
psThe parsedb state.
versionThe version to parse into.
valueThe version string to parse from.
Return values
0On success, and err is reset.
-1On failure, and err is set accordingly.

Referenced by f_configversion(), and f_version().

Here is the caller graph for this function:

◆ parse_ensure_have_field()

void parse_ensure_have_field ( struct parsedb_state ps,
const char **  value,
const char *  what 
)

References _, and parse_warn().

Here is the call graph for this function:

◆ parse_error()

void parse_error ( struct parsedb_state ps,
const char *  fmt,
  ... 
)

References args, and ohshit().

Referenced by f_archives(), f_conffiles(), f_configversion(), f_name(), f_status(), f_trigaw(), f_trigpend(), and parse_must_have_field().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse_must_have_field()

void parse_must_have_field ( struct parsedb_state ps,
const char *  value,
const char *  what 
)

References _, and parse_error().

Here is the call graph for this function:

◆ parse_problem()

void parse_problem ( struct parsedb_state ps,
const char *  fmt,
  ... 
)

References args, DPKG_MSG_WARN, parsedb_state::err, ohshit(), dpkg_error::str, dpkg_error::type, and warning().

Referenced by f_configversion(), and f_version().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse_stanza()

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.

References parsedb_state::dataptr, field_state::fieldstart, parsedb_state::lno, MSDOS_EOF_CHAR, parse_at_eof, and parse_getc.

Referenced by parsedb_parse().

Here is the caller graph for this function:

◆ parse_warn()

void parse_warn ( struct parsedb_state ps,
const char *  fmt,
  ... 
)

References args, and warning().

Referenced by f_architecture(), f_obs_class(), f_obs_dependency(), f_obs_revision(), and parse_ensure_have_field().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parsedb_close()

void parsedb_close ( struct parsedb_state ps)

Teardown a package deb822 parser context.

References _, parsedb_state::data, dpkg_error_destroy(), ehflag_normaltidy, parsedb_state::endptr, parsedb_state::err, parsedb_state::errmsg, parsedb_state::fd, parsedb_state::filename, parsedb_state::flags, ohshite(), pdb_close_fd, pop_cleanup(), and varbuf_destroy().

Referenced by parsedb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parsedb_load()

void parsedb_load ( struct parsedb_state ps)

Load data for package deb822 style parsing.

References _, varbuf::buf, parsedb_state::data, parsedb_state::dataptr, parsedb_state::endptr, parsedb_state::fd, fd_read(), fd_vbuf_copy, parsedb_state::filename, parsedb_state::flags, m_malloc(), ohshit(), ohshite(), pdb_allow_empty, dpkg_error::str, varbuf_detach(), varbuf_end_str(), and VARBUF_INIT.

Referenced by parsedb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parsedb_new()

struct parsedb_state * parsedb_new ( const char *  filename,
int  fd,
enum parsedbflags  flags 
)

Create a new deb822 parser context.

References DPKG_ERROR_OBJECT, parsedb_state::err, parsedb_state::errmsg, parsedb_state::filename, m_malloc(), parsedb_state::type, and VARBUF_OBJECT.

Referenced by parsedb_open().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parsedb_open()

struct parsedb_state * parsedb_open ( const char *  filename,
enum parsedbflags  flags 
)

Open a file for deb822 parsing.

References _, cu_closefd(), ehflag_normaltidy, parsedb_state::fd, parsedb_state::filename, parsedb_state::flags, ohshite(), parsedb_new(), pdb_allow_empty, pdb_close_fd, pdb_dash_is_stdin, and push_cleanup().

Referenced by parsedb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parsedb_parse()

int parsedb_parse ( struct parsedb_state ps,
struct pkginfo **  donep 
)

Parse deb822 style package data from a buffer.

donep may be NULL. If donep is not NULL only one package's information is expected.

References array_count, pkginfo::available, parsedb_state::data, field_state::fieldencountered, fieldinfos, parsedb_state::flags, pkginfo::installed, parse_stanza(), pdb_allow_empty, pdb_recordavailable, pkgset::pkg, pkg_parse_object::pkg, parsedb_state::pkg, pkg_parse_object::pkgbin, parsedb_state::pkgbin, and pkgset_blank().

Referenced by parsedb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ varbuf_add_arbfield()

void varbuf_add_arbfield ( struct varbuf vb,
const struct arbitraryfield arbfield,
enum fwriteflags  flags 
)

References fw_printheader, arbitraryfield::name, arbitraryfield::value, varbuf_add_char(), and varbuf_add_str.

Referenced by varbufrecord().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ f_architecture

freadfunction f_architecture

◆ f_archives

freadfunction f_archives

◆ f_boolean

freadfunction f_boolean

◆ f_charfield

freadfunction f_charfield

◆ f_conffiles

freadfunction f_conffiles

◆ f_configversion

freadfunction f_configversion

◆ f_dependency

freadfunction f_dependency

◆ f_multiarch

freadfunction f_multiarch

◆ f_name

freadfunction f_name

◆ f_obs_class

freadfunction f_obs_class

◆ f_obs_dependency

freadfunction f_obs_dependency

◆ f_obs_revision

freadfunction f_obs_revision

◆ f_priority

freadfunction f_priority

◆ f_section

freadfunction f_section

◆ f_status

freadfunction f_status

◆ f_trigaw

freadfunction f_trigaw

◆ f_trigpend

freadfunction f_trigpend

◆ f_version

freadfunction f_version

◆ fieldinfos

const struct fieldinfo fieldinfos[]
extern

Fields information.

Referenced by parsedb_parse(), and varbufrecord().

◆ w_architecture

fwritefunction w_architecture

◆ w_archives

fwritefunction w_archives

◆ w_booleandefno

fwritefunction w_booleandefno

◆ w_charfield

fwritefunction w_charfield

◆ w_conffiles

fwritefunction w_conffiles

◆ w_configversion

fwritefunction w_configversion

◆ w_dependency

fwritefunction w_dependency

◆ w_multiarch

fwritefunction w_multiarch

◆ w_name

◆ w_null

◆ w_priority

fwritefunction w_priority

◆ w_section

fwritefunction w_section

◆ w_status

fwritefunction w_status

◆ w_trigaw

fwritefunction w_trigaw

◆ w_trigpend

fwritefunction w_trigpend

◆ w_version

fwritefunction w_version