home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / misc / src / rpm / tools / dumpdb.c < prev    next >
C/C++ Source or Header  |  1997-09-17  |  1KB  |  58 lines

  1. #include <errno.h>
  2. #include <fcntl.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <unistd.h>
  6. #include <stdlib.h>
  7.  
  8. #include "header.h"
  9. #include "rpmlib.h"
  10.  
  11. void main(int argc, char ** argv)
  12. {
  13.     Header h;
  14.     int offset;
  15.     int dspBlockNum = 0;            /* default to all */
  16.     int blockNum = 0;
  17.     rpmdb db;
  18.  
  19.     rpmReadConfigFiles(NULL, NULL, NULL, 0);
  20.  
  21.     if (argc == 2) {
  22.     dspBlockNum = atoi(argv[1]);
  23.     } else if (argc != 1) {
  24.     fprintf(stderr, "dumpdb <block num>\n");
  25.     exit(1);
  26.     }
  27.  
  28.     if (rpmdbOpen("", &db, O_RDONLY, 0644)) {
  29.     fprintf(stderr, "cannot open /var/lib/rpm/packages.rpm\n");
  30.     exit(1);
  31.     }
  32.  
  33.     offset = rpmdbFirstRecNum(db);
  34.     while (offset) {
  35.     blockNum++;
  36.  
  37.     if (!dspBlockNum || dspBlockNum == blockNum) {
  38.         h = rpmdbGetRecord(db, offset);
  39.         if (!h) {
  40.         fprintf(stderr, "headerRead failed\n");
  41.         exit(1);
  42.         }
  43.       
  44.         headerDump(h, stdout, 1, rpmTagTable);
  45.         printf("Offset: %d\n", offset);
  46.         headerFree(h);
  47.     }
  48.     
  49.     if (dspBlockNum && blockNum > dspBlockNum) exit(0);
  50.  
  51.     offset = rpmdbNextRecNum(db, offset);
  52.     }
  53.  
  54.     rpmdbClose(db);
  55. }
  56.  
  57.   
  58.