Ejemplo n.º 1
0
/**
* @brief Clean up after dpkg operations
*/
void dpkg_teardown(struct pkg_array *packages) {
  pkg_array_destroy(packages);

  pkg_db_reset();
  modstatdb_done();

  pop_error_context(ehflag_normaltidy);
}
Ejemplo n.º 2
0
void modstatdb_shutdown(void) {
    if (cflags >= msdbrw_available_write)
        writedb(availablefile, wdb_dump_available);

    switch (cstatus) {
    case msdbrw_write:
        modstatdb_checkpoint();
        /* Tidy up a bit, but don't worry too much about failure. */
        fclose(importanttmp);
        unlink(importanttmpfile);
        varbuf_destroy(&uvb);
    /* Fall through. */
    case msdbrw_needsuperuserlockonly:
        modstatdb_unlock();
    default:
        break;
    }

    modstatdb_done();
}
Ejemplo n.º 3
0
int
updateavailable(const char *const *argv)
{
  const char *sourcefile= argv[0];
  char *availfile;
  int count= 0;

  modstatdb_init();

  switch (cipaction->arg_int) {
  case act_avclear:
    if (sourcefile) badusage(_("--%s takes no arguments"),cipaction->olong);
    break;
  case act_avreplace: case act_avmerge:
    if (!sourcefile || argv[1])
      badusage(_("--%s needs exactly one Packages-file argument"),
               cipaction->olong);
    break;
  default:
    internerr("unknown action '%d'", cipaction->arg_int);
  }

  if (!f_noact) {
    if (access(dpkg_db_get_dir(), W_OK)) {
      if (errno != EACCES)
        ohshite(_("unable to access dpkg status area for bulk available update"));
      else
        ohshit(_("bulk available update requires write access to dpkg status area"));
    }
    modstatdb_lock();
  }

  switch (cipaction->arg_int) {
  case act_avreplace:
    printf(_("Replacing available packages info, using %s.\n"),sourcefile);
    break;
  case act_avmerge:
    printf(_("Updating available packages info, using %s.\n"),sourcefile);
    break;
  case act_avclear:
    break;
  default:
    internerr("unknown action '%d'", cipaction->arg_int);
  }

  availfile = dpkg_db_get_path(AVAILFILE);

  if (cipaction->arg_int == act_avmerge)
    parsedb(availfile, pdb_parse_available, NULL);

  if (cipaction->arg_int != act_avclear)
    count += parsedb(sourcefile, pdb_parse_available | pdb_ignoreolder, NULL);

  if (!f_noact) {
    writedb(availfile, wdb_dump_available);
    modstatdb_unlock();
  }

  free(availfile);

  if (cipaction->arg_int != act_avclear)
    printf(P_("Information about %d package was updated.\n",
              "Information about %d packages was updated.\n", count), count);

  modstatdb_done();

  return 0;
}