File mod_debian.c

This module (mostly) encapsulates the functions that read the Debian-specific database.

References Functions: debian_cleanup()mod_debian.c
  debian_database()mod_debian.c


Included Files

This file contains the manifest constants used by the parser. They always have the form T_XXX.


Preprocessor definitions

This is an arbitrary number that should be large enough for the next few years. We can make this number fairly large since it only allocates a pointer - the parser allocates all necessary buffers itself.

#define MAX_PACKAGES


Global Variable magpie_module

struct magpie_module magpie_module
Included from magpie.h
Visible in:  magpie.c
   mod_conffiles.c
   mod_core.c
   mod_debian.c
   mod_installed.c
   mod_isizes.c
   mod_keywords.c
   mod_maintainers.c
   mod_md5sums.c
   mod_names.c
   mod_priorities.c
   mod_sections.c
   mod_setuids.c
   mod_sizes.c
   mod_sources.c
   mod_tasks.c
   mod_xml.c
   support.c

Global Variable cache

We use a simple array to access the structures allocated by the parser. This allows us to easily sort the contents.

struct package_info* cache[]
Visible in:  magpie.c
   mod_conffiles.c
   mod_core.c
   mod_debian.c
   mod_installed.c
   mod_isizes.c
   mod_keywords.c
   mod_maintainers.c
   mod_md5sums.c
   mod_names.c
   mod_priorities.c
   mod_sections.c
   mod_setuids.c
   mod_sizes.c
   mod_sources.c
   mod_tasks.c
   mod_xml.c
   support.c
Used in: conffiles_init()mod_conffiles.c
  debian_cleanup()mod_debian.c
  installed_init()mod_installed.c
  isize_init()mod_isizes.c
  keywords_init()mod_keywords.c
  maintainers_init()mod_maintainers.c
  md5sums_init()mod_md5sums.c
  names_init()mod_names.c
  pass1()mod_core.c
  pass2()mod_core.c
  pass3()mod_core.c
  pass4()mod_core.c
  pass5()mod_core.c
  pass_last()mod_core.c
  priorities_init()mod_priorities.c
  process()mod_debian.c
  sections_details()mod_sections.c
  sizes_init()mod_sizes.c
  sources_init()mod_sources.c
  tasks_init()mod_tasks.c
  xml_packages()mod_xml.c
  xml_status()mod_xml.c


Global Variable cachecnt

int cachecnt
Visible in:  magpie.c
   mod_conffiles.c
   mod_core.c
   mod_debian.c
   mod_installed.c
   mod_isizes.c
   mod_keywords.c
   mod_maintainers.c
   mod_md5sums.c
   mod_names.c
   mod_priorities.c
   mod_sections.c
   mod_setuids.c
   mod_sizes.c
   mod_sources.c
   mod_tasks.c
   mod_xml.c
   support.c
Used in: conffiles_init()mod_conffiles.c
  debian_cleanup()mod_debian.c
  installed_init()mod_installed.c
  isize_init()mod_isizes.c
  keywords_init()mod_keywords.c
  maintainers_init()mod_maintainers.c
  md5sums_init()mod_md5sums.c
  names_init()mod_names.c
  pass1()mod_core.c
  pass2()mod_core.c
  pass3()mod_core.c
  pass4()mod_core.c
  pass5()mod_core.c
  pass_last()mod_core.c
  priorities_init()mod_priorities.c
  process()mod_debian.c
  sections_details()mod_sections.c
  sizes_init()mod_sizes.c
  sources_init()mod_sources.c
  tasks_init()mod_tasks.c
  xml_packages()mod_xml.c
  xml_status()mod_xml.c

Global Variable matrixcnt_s

arrays containing the number of packages in each category. This allows us to avoid creating empty files.

int matrixcnt_s[8]
Visible in:  magpie.c
   mod_conffiles.c
   mod_core.c
   mod_debian.c
   mod_installed.c
   mod_isizes.c
   mod_keywords.c
   mod_maintainers.c
   mod_md5sums.c
   mod_names.c
   mod_priorities.c
   mod_sections.c
   mod_setuids.c
   mod_sizes.c
   mod_sources.c
   mod_tasks.c
   mod_xml.c
   support.c
Used in: debian_database()mod_debian.c
  process()mod_debian.c
  sections_details()mod_sections.c
  sections_index()mod_sections.c
  xml_packages()mod_xml.c


Global Variable matrixcnt_sc

int matrixcnt_sc[8][31]
Visible in:  magpie.c
   mod_conffiles.c
   mod_core.c
   mod_debian.c
   mod_installed.c
   mod_isizes.c
   mod_keywords.c
   mod_maintainers.c
   mod_md5sums.c
   mod_names.c
   mod_priorities.c
   mod_sections.c
   mod_setuids.c
   mod_sizes.c
   mod_sources.c
   mod_tasks.c
   mod_xml.c
   support.c
Used in: debian_database()mod_debian.c
  process()mod_debian.c
  sections_details()mod_sections.c
  sections_index()mod_sections.c

Global Variable matrixcnt_scp

int matrixcnt_scp[8][31][5]
Visible in:  magpie.c
   mod_conffiles.c
   mod_core.c
   mod_debian.c
   mod_installed.c
   mod_isizes.c
   mod_keywords.c
   mod_maintainers.c
   mod_md5sums.c
   mod_names.c
   mod_priorities.c
   mod_sections.c
   mod_setuids.c
   mod_sizes.c
   mod_sources.c
   mod_tasks.c
   mod_xml.c
   support.c
Used in: debian_database()mod_debian.c
  priorities_index()mod_priorities.c
  priorities_init()mod_priorities.c
  process()mod_debian.c
  sections_details()mod_sections.c
  sections_index()mod_sections.c

Global Variable matrixcnt_sp

int matrixcnt_sp[8][5]
Visible in:  magpie.c
   mod_conffiles.c
   mod_core.c
   mod_debian.c
   mod_installed.c
   mod_isizes.c
   mod_keywords.c
   mod_maintainers.c
   mod_md5sums.c
   mod_names.c
   mod_priorities.c
   mod_sections.c
   mod_setuids.c
   mod_sizes.c
   mod_sources.c
   mod_tasks.c
   mod_xml.c
   support.c
Used in: debian_database()mod_debian.c
  priorities_index()mod_priorities.c
  priorities_init()mod_priorities.c
  process()mod_debian.c

Global Variable matrixcnt_p

int matrixcnt_p[5]
Visible in:  magpie.c
   mod_conffiles.c
   mod_core.c
   mod_debian.c
   mod_installed.c
   mod_isizes.c
   mod_keywords.c
   mod_maintainers.c
   mod_md5sums.c
   mod_names.c
   mod_priorities.c
   mod_sections.c
   mod_setuids.c
   mod_sizes.c
   mod_sources.c
   mod_tasks.c
   mod_xml.c
   support.c
Used in: debian_database()mod_debian.c
  priorities_index()mod_priorities.c
  priorities_init()mod_priorities.c
  process()mod_debian.c

Global Variable mod_debian

struct magpie_module mod_debian
Visible in:  magpie.c
   mod_debian.c
Used in:  magpie.c

External Variables

yyin
Some globals used by the bison/flex parser.

extern FILE* yyin

yydebug
extern int yydebug

lineno
extern int lineno


Local Variables

rcsid
static const char rcsid[]

Global Function debian_database()

Ingest all 'packages' files in the apt cache, plus the dpkg status file. We don't perform any locking, although we really should!

int debian_database ( void )
Calls: process()mod_debian.c
  __builtin_constant_p(), __constant_c_and_count_memset(), __constant_c_memset(), __memset_generic(), closedir(), opendir(), readdir(), sprintf(), strcmp(), strlen()
Used in:  mod_debian.c
References Variables: matrixcnt_pmod_debian.c
  matrixcnt_smod_debian.c
  matrixcnt_scmod_debian.c
  matrixcnt_scpmod_debian.c
  matrixcnt_spmod_debian.c
  yydebug


Local Function debian_cleanup()

Release the pacakge database and buffers used in flex. This allows us to check for memory leaks with a profiler or 'purify'.

static int debian_cleanup ( void )
Calls: free_flex(), free_info()
Used in:  mod_debian.c
References Variables: cachemod_debian.c
  cachecntmod_debian.c


Local Function process()

Ingest a single Debian 'packages' file. All of the heavy lifting is handled by the bison parser.

static int process ( const char* filename, int flag )

const char* filename
the name of the packages or status file
int flag
0 = packages file, 1 = status file
Calls: __assert_fail(), fclose(), fopen(), free_info(), strcmp(), strdup(), yyparse()
Called by: debian_database()mod_debian.c
References Variables: cachemod_debian.c
  cachecntmod_debian.c
  matrixcnt_pmod_debian.c
  matrixcnt_smod_debian.c
  matrixcnt_scmod_debian.c
  matrixcnt_scpmod_debian.c
  matrixcnt_spmod_debian.c
  lineno, yyin