summaryrefslogtreecommitdiff
path: root/ftparchive
diff options
context:
space:
mode:
authorArch Librarian <arch@canonical.com>2004-09-20 17:06:43 +0000
committerArch Librarian <arch@canonical.com>2004-09-20 17:06:43 +0000
commitc9569a1edaf6f93cbeefe0b8dacc02c14dbb6cc9 (patch)
tree0116f442851cc9734ad663f3825168e4d9852d8a /ftparchive
parent77113d1158583ebcc931997786e2a930f6bfa7a6 (diff)
* Build apt-ftparchive with libdb4.2 rather than libdb2
Author: mdz Date: 2004-05-08 19:41:01 GMT * Build apt-ftparchive with libdb4.2 rather than libdb2 - Patch from Clint Adams to do most of the work - Build-Depends: s/libdb2-dev/libdb4.2-dev/ - Add AC_PREREQ(2.50) to configure.in - Use db_strerror(err) rather than GlobalError::Errno (which uses strerror)
Diffstat (limited to 'ftparchive')
-rw-r--r--ftparchive/cachedb.cc35
-rw-r--r--ftparchive/cachedb.h4
-rw-r--r--ftparchive/makefile6
3 files changed, 27 insertions, 18 deletions
diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc
index 440a90665..9e93dff05 100644
--- a/ftparchive/cachedb.cc
+++ b/ftparchive/cachedb.cc
@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: cachedb.cc,v 1.6 2003/02/10 07:34:41 doogie Exp $
+// $Id: cachedb.cc,v 1.7 2004/05/08 19:41:01 mdz Exp $
/* ######################################################################
CacheDB
@@ -30,6 +30,8 @@
/* This opens the DB2 file for caching package information */
bool CacheDB::ReadyDB(string DB)
{
+ int err;
+
ReadOnly = _config->FindB("APT::FTPArchive::ReadOnlyDB",false);
// Close the old DB
@@ -50,13 +52,26 @@ bool CacheDB::ReadyDB(string DB)
if (DB.empty())
return true;
-
- if ((errno = db_open(DB.c_str(),DB_HASH,
+
+ db_create(&Dbp, NULL, 0);
+ if ((err = Dbp->open(Dbp, NULL, DB.c_str(), NULL, DB_HASH,
(ReadOnly?DB_RDONLY:DB_CREATE),
- 0644,0,0,&Dbp)) != 0)
+ 0644)) != 0)
{
- Dbp = 0;
- return _error->Errno("db_open",_("Unable to open DB2 file %s"),DB.c_str());
+ if (err == DB_OLD_VERSION)
+ {
+ _error->Warning(_("DB is old, attempting to upgrade %s"),DBFile.c_str());
+ err = Dbp->upgrade(Dbp, DB.c_str(), 0);
+ if (!err)
+ err = Dbp->open(Dbp, NULL, DB.c_str(), NULL, DB_HASH,
+ (ReadOnly?DB_RDONLY:DB_CREATE), 0644);
+
+ }
+ if (err)
+ {
+ Dbp = 0;
+ return _error->Error(_("Unable to open DB file %s: %s"),DB.c_str(), db_strerror(err));
+ }
}
DBFile = DB;
@@ -247,15 +262,9 @@ bool CacheDB::Clean()
/* I'm not sure what VERSION_MINOR should be here.. 2.4.14 certainly
needs the lower one and 2.7.7 needs the upper.. */
-#if DB_VERSION_MAJOR >= 2 && DB_VERSION_MINOR >= 7
DBC *Cursor;
- if ((errno = Dbp->cursor(Dbp,0,&Cursor,0)) != 0)
+ if ((errno = Dbp->cursor(Dbp, NULL, &Cursor, 0)) != 0)
return _error->Error(_("Unable to get a cursor"));
-#else
- DBC *Cursor;
- if ((errno = Dbp->cursor(Dbp,0,&Cursor)) != 0)
- return _error->Error(_("Unable to get a cursor"));
-#endif
DBT Key;
DBT Data;
diff --git a/ftparchive/cachedb.h b/ftparchive/cachedb.h
index 257af20fc..1229b98ef 100644
--- a/ftparchive/cachedb.h
+++ b/ftparchive/cachedb.h
@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: cachedb.h,v 1.3 2002/11/22 07:19:51 doogie Exp $
+// $Id: cachedb.h,v 1.4 2004/05/08 19:41:01 mdz Exp $
/* ######################################################################
CacheDB
@@ -16,7 +16,7 @@
#pragma interface "cachedb.h"
#endif
-#include <db2/db.h>
+#include <db.h>
#include <string>
#include <apt-pkg/debfile.h>
#include <inttypes.h>
diff --git a/ftparchive/makefile b/ftparchive/makefile
index ca6d8f9fe..a965166a0 100644
--- a/ftparchive/makefile
+++ b/ftparchive/makefile
@@ -6,9 +6,9 @@ SUBDIR=ftparchive
include ../buildlib/defaults.mak
# The apt-ftparchive program
-ifdef DB2LIB
+ifdef BDBLIB
PROGRAM=apt-ftparchive
-SLIBS = -lapt-pkg -lapt-inst $(DB2LIB)
+SLIBS = -lapt-pkg -lapt-inst $(BDBLIB)
LIB_MAKES = apt-pkg/makefile apt-inst/makefile
SOURCE = apt-ftparchive.cc cachedb.cc writer.cc contents.cc override.cc \
multicompress.cc
@@ -17,4 +17,4 @@ else
PROGRAM=apt-ftparchive
MESSAGE="Must have db2 to build apt-ftparchive"
include $(FAIL_H)
-endif # ifdef DB2LIB
+endif # ifdef BDBLIB