CVS patchset: 5336
CVS date: 2002/02/25 15:29:22
AC_CHECK_HEADERS(sys/mount.h sys/mntctl.h sys/param.h sys/vmount.h)
AC_CHECK_HEADERS(bzlib.h libio.h zlib.h)
AC_CHECK_HEADERS(err.h mcheck.h)
AC_CHECK_HEADERS(sys/mount.h sys/mntctl.h sys/param.h sys/vmount.h)
AC_CHECK_HEADERS(bzlib.h libio.h zlib.h)
AC_CHECK_HEADERS(err.h mcheck.h)
+AC_CHECK_HEADERS(pthread.h)
dnl popt w float/double needs.
AC_CHECK_HEADERS(float.h)
dnl popt w float/double needs.
AC_CHECK_HEADERS(float.h)
/*@-redecl@*/
#if USE_DB1
/*@unchecked@*/
/*@-redecl@*/
#if USE_DB1
/*@unchecked@*/
+/*@-exportheadervar -declundef @*/
extern struct _dbiVec db1vec;
extern struct _dbiVec db1vec;
+/*@=exportheadervar =declundef @*/
#define DB1vec &db1vec
#else
#define DB1vec NULL
#define DB1vec &db1vec
#else
#define DB1vec NULL
#if USE_DB2
/*@unchecked@*/
#if USE_DB2
/*@unchecked@*/
+/*@-exportheadervar -declundef @*/
extern struct _dbiVec db2vec;
extern struct _dbiVec db2vec;
+/*@=exportheadervar =declundef @*/
#define DB2vec &db2vec
#else
#define DB2vec NULL
#define DB2vec &db2vec
#else
#define DB2vec NULL
#if USE_DB3
/*@unchecked@*/
#if USE_DB3
/*@unchecked@*/
+/*@-exportheadervar -declundef @*/
extern struct _dbiVec db3vec;
extern struct _dbiVec db3vec;
+/*@=exportheadervar =declundef @*/
#define DB3vec &db3vec
#else
#define DB3vec NULL
#define DB3vec &db3vec
#else
#define DB3vec NULL
* Return new configured index database handle instance.
* @param rpmdb rpm database
*/
* Return new configured index database handle instance.
* @param rpmdb rpm database
*/
-/*@only@*/ /*@null@*/ dbiIndex db3New(rpmdb rpmdb, int rpmtag)
+/*@unused@*/ /*@only@*/ /*@null@*/
+dbiIndex db3New(rpmdb rpmdb, int rpmtag)
/*@globals rpmGlobalMacroContext @*/
/*@modifies rpmGlobalMacroContext @*/;
/*@globals rpmGlobalMacroContext @*/
/*@modifies rpmGlobalMacroContext @*/;
* @param dbi index database handle
* @return NULL always
*/
* @param dbi index database handle
* @return NULL always
*/
-/*@null@*/ dbiIndex db3Free( /*@only@*/ /*@null@*/ dbiIndex dbi)
+/*@null@*/
+dbiIndex db3Free( /*@only@*/ /*@null@*/ dbiIndex dbi)
* @return formatted flags (static buffer)
*/
/*@-redecl@*/
* @return formatted flags (static buffer)
*/
/*@-redecl@*/
-/*@exposed@*/ extern const char *const prDbiOpenFlags(int dbflags,
+/*@exposed@*/
+extern const char *const prDbiOpenFlags(int dbflags,
int print_dbenv_flags)
/*@*/;
/*@=redecl@*/
int print_dbenv_flags)
/*@*/;
/*@=redecl@*/
/* The fts interface is incompatible with the LFS interface which
transparently uses the 64-bit file access functions. */
/* The fts interface is incompatible with the LFS interface which
transparently uses the 64-bit file access functions. */
#ifdef __USE_FILE_OFFSET64
# error "<fts.h> cannot be used with -D_FILE_OFFSET_BITS==64"
#endif
#ifdef __USE_FILE_OFFSET64
# error "<fts.h> cannot be used with -D_FILE_OFFSET_BITS==64"
#endif
int fts_rfd; /*!< fd for root */
int fts_pathlen; /*!< sizeof(path) */
int fts_nitems; /*!< elements in the sort array */
int fts_rfd; /*!< fd for root */
int fts_pathlen; /*!< sizeof(path) */
int fts_nitems; /*!< elements in the sort array */
int (*fts_compar) (const void *, const void *)
/*@*/; /*!< compare fn */
int (*fts_compar) (const void *, const void *)
/*@*/; /*!< compare fn */
+
+/**
+ * Return list of children of the current node.
+ * @param sp file hierarchy state
+ * @return file set member
+ */
+/*@unused@*/ /*@dependent@*/
FTSENT *Fts_children (FTS * sp, int instr) __THROW
/*@globals fileSystem, internalState @*/
/*@modifies *sp, fileSystem, internalState @*/;
FTSENT *Fts_children (FTS * sp, int instr) __THROW
/*@globals fileSystem, internalState @*/
/*@modifies *sp, fileSystem, internalState @*/;
+
+/**
+ * Destroy a file hierarchy traversal handle.
+ * @param sp file hierarchy state
+ * @return 0 on sucess, -1 on error
+ */
+/*@unused@*/
int Fts_close (/*@only@*/ FTS * sp) __THROW
/*@globals fileSystem, internalState @*/
/*@modifies *sp, fileSystem, internalState @*/;
int Fts_close (/*@only@*/ FTS * sp) __THROW
/*@globals fileSystem, internalState @*/
/*@modifies *sp, fileSystem, internalState @*/;
+
+/**
+ * Create a handle for file hierarchy traversal.
+ * @param argv paths that compose a logical file hierarchy
+ * @param options traversal options
+ * @param compar traversal ordering (or NULL)
+ * @return file hierarchy state (or NULL on error)
+ */
+/*@unused@*/ /*@only@*/
FTS *Fts_open (char * const * argv, int options,
FTS *Fts_open (char * const * argv, int options,
int (*compar) (const FTSENT **, const FTSENT **)) __THROW
/*@*/;
int (*compar) (const FTSENT **, const FTSENT **)) __THROW
/*@*/;
+
+/**
+ * Return next node in the file hierarchy traversal.
+ * @param sp file hierarchy state
+ * @return file set member
+ */
+/*@unused@*/ /*@null@*/
FTSENT *Fts_read (FTS * sp) __THROW
/*@globals fileSystem, internalState @*/
/*@modifies *sp, fileSystem, internalState @*/;
FTSENT *Fts_read (FTS * sp) __THROW
/*@globals fileSystem, internalState @*/
/*@modifies *sp, fileSystem, internalState @*/;
+
+/**
+ * Modify the traversal for a file set member.
+ * @param sp file hierarchy state
+ * @param p file set member
+ * @param instr new disposition for file set member
+ * @return 0 on sucess, -1 on error
+ */
+/*@unused@*/
int Fts_set (FTS * sp, FTSENT * p, int instr) __THROW
/*@modifies *p @*/;
int Fts_set (FTS * sp, FTSENT * p, int instr) __THROW
/*@modifies *p @*/;
__END_DECLS
#endif /* fts.h */
__END_DECLS
#endif /* fts.h */
RPMERR_RPMRC = _em(24), /*!< bad line in rpmrc */
RPMERR_NOSPEC = _em(25), /*!< .spec file is missing */
RPMERR_NOTSRPM = _em(26), /*!< a source rpm was expected */
RPMERR_RPMRC = _em(24), /*!< bad line in rpmrc */
RPMERR_NOSPEC = _em(25), /*!< .spec file is missing */
RPMERR_NOTSRPM = _em(26), /*!< a source rpm was expected */
- RPMERR_FLOCK = _em(27), /*!< locking the database failed */
+ RPMERR_FLOCK = _em(27), /*!< locking the database failed */
RPMERR_OLDPACKAGE = _em(28), /*!< trying upgrading to old version */
/* RPMERR_BADARCH = _em(29), bad architecture or arch mismatch */
/*@=enummemuse@*/
RPMERR_OLDPACKAGE = _em(28), /*!< trying upgrading to old version */
/* RPMERR_BADARCH = _em(29), bad architecture or arch mismatch */
/*@=enummemuse@*/
RPMERR_QUERY = _em(124), /*!< */
RPMERR_QFMT = _em(125), /*!< */
RPMERR_DBCONFIG = _em(126), /*!< */
RPMERR_QUERY = _em(124), /*!< */
RPMERR_QFMT = _em(125), /*!< */
RPMERR_DBCONFIG = _em(126), /*!< */
- RPMERR_DBERR = _em(127), /*!< */
+ RPMERR_DBERR = _em(127), /*!< */
RPMERR_BADPACKAGE = _em(128), /*!< getNextHeader: %s */
RPMERR_BADPACKAGE = _em(128), /*!< getNextHeader: %s */
RPMERR_FREELIST = _em(129), /*!< free list corrupt (%u)- please ... */
RPMERR_FREELIST = _em(129), /*!< free list corrupt (%u)- please ... */
RPMERR_DATATYPE = _em(130), /*!< Data type %d not supported */
RPMERR_BUILDROOT = _em(131), /*!< */
RPMERR_MAKETEMP = _em(132), /*!< makeTempFile failed */
RPMERR_DATATYPE = _em(130), /*!< Data type %d not supported */
RPMERR_BUILDROOT = _em(131), /*!< */
RPMERR_MAKETEMP = _em(132), /*!< makeTempFile failed */
RPMDEBUG_UNLINK = _dm(512u+16), /*!< unlink(2) failed */
RPMDEBUG_RMDIR = _dm(512u+17), /*!< rmdir(2) failed */
RPMDEBUG_UNLINK = _dm(512u+16), /*!< unlink(2) failed */
RPMDEBUG_RMDIR = _dm(512u+17), /*!< rmdir(2) failed */
RPMWARN_FLOCK = _wm(512u+27) /*!< locking the database failed */
RPMWARN_FLOCK = _wm(512u+27) /*!< locking the database failed */
} rpmerrCode;
/*@=typeuse @*/
} rpmerrCode;
/*@=typeuse @*/
int Fcntl(FD_t fd, int op, void *lip)
/*@globals fileSystem @*/
/*@modifies fd, *lip, fileSystem @*/;
int Fcntl(FD_t fd, int op, void *lip)
/*@globals fileSystem @*/
/*@modifies fd, *lip, fileSystem @*/;
/**
* readdir(3) clone.
*/
/**
* readdir(3) clone.
*/
-/*@null@*/ struct dirent * Readdir(DIR * dir)
+/*@null@*/
+struct dirent * Readdir(DIR * dir)
/*@globals fileSystem @*/
/*@modifies *dir, fileSystem @*/;
/**
* closedir(3) clone.
*/
/*@globals fileSystem @*/
/*@modifies *dir, fileSystem @*/;
/**
* closedir(3) clone.
*/
-int Closedir(/*@only@*/ DIR * dir)
+int Closedir(/*@only@*/ DIR * dir)
/*@globals fileSystem @*/
/*@modifies *dir, fileSystem @*/;
/*@globals fileSystem @*/
/*@modifies *dir, fileSystem @*/;
+
+#if defined(HAVE_PTHREAD_H) && !defined(__LCLINT__)
#include <rpmio_internal.h>
#include <popt.h>
#include "ugid.h"
#include <rpmio_internal.h>
#include <popt.h>
#include "ugid.h"
-static const char * statstr(struct stat * st)
+static const char * statstr(const struct stat * st,
+ /*@returned@*/ /*@out@*/ char * buf)
+ /*@modifies *buf @*/
- static char buf[1024];
-sprintf(buf, "*** dev %x ino %x mode %0o nlink %d uid %d gid %d rdev %x size %x\n",
-(unsigned)st->st_dev,
-(unsigned)st->st_ino,
-st->st_mode,
-st->st_nlink,
-st->st_uid,
-st->st_gid,
-(unsigned)st->st_rdev,
-(unsigned)st->st_size);
+ sprintf(buf,
+ "*** dev %x ino %x mode %0o nlink %d uid %d gid %d rdev %x size %x\n",
+ (unsigned)st->st_dev,
+ (unsigned)st->st_ino,
+ st->st_mode,
+ st->st_nlink,
+ st->st_uid,
+ st->st_gid,
+ (unsigned)st->st_rdev,
+ (unsigned)st->st_size);
-static int ftp_st_ino = 0x1000;
+/*@unchecked@*/
+static int ftp_st_ino = 0xdead0000;
static int ftpStat(const char * path, /*@out@*/ struct stat *st)
/*@globals fileSystem @*/
/*@modifies *st, fileSystem @*/
{
static int ftpStat(const char * path, /*@out@*/ struct stat *st)
/*@globals fileSystem @*/
/*@modifies *st, fileSystem @*/
{
int rc;
rc = ftpNLST(path, DO_FTP_STAT, st, NULL, 0);
int rc;
rc = ftpNLST(path, DO_FTP_STAT, st, NULL, 0);
-if (_ftp_debug)
-fprintf(stderr, "*** ftpStat(%s) rc %d\n%s", path, rc, statstr(st));
/* XXX fts(3) needs/uses st_ino, make something up for now. */
/* XXX fts(3) needs/uses st_ino, make something up for now. */
if (st->st_ino == 0)
st->st_ino = ftp_st_ino++;
if (st->st_ino == 0)
st->st_ino = ftp_st_ino++;
+ /*@=mods@*/
+if (_ftp_debug)
+fprintf(stderr, "*** ftpStat(%s) rc %d\n%s", path, rc, statstr(st, buf));
/*@globals fileSystem @*/
/*@modifies *st, fileSystem @*/
{
/*@globals fileSystem @*/
/*@modifies *st, fileSystem @*/
{
int rc;
rc = ftpNLST(path, DO_FTP_LSTAT, st, NULL, 0);
int rc;
rc = ftpNLST(path, DO_FTP_LSTAT, st, NULL, 0);
-if (_ftp_debug)
-fprintf(stderr, "*** ftpLstat(%s) rc %d\n%s\n", path, rc, statstr(st));
-st->st_ino = ftp_st_ino++;
/* XXX fts(3) needs/uses st_ino, make something up for now. */
/* XXX fts(3) needs/uses st_ino, make something up for now. */
if (st->st_ino == 0)
st->st_ino = ftp_st_ino++;
if (st->st_ino == 0)
st->st_ino = ftp_st_ino++;
+ /*@=mods@*/
+if (_ftp_debug)
+fprintf(stderr, "*** ftpLstat(%s) rc %d\n%s\n", path, rc, statstr(st, buf));
size_t size; /* Total valid data in the block. */
size_t offset; /* Current offset into the block. */
off_t filepos; /* Position of next entry to read. */
size_t size; /* Total valid data in the block. */
size_t offset; /* Current offset into the block. */
off_t filepos; /* Position of next entry to read. */
+#if defined(HAVE_PTHREAD_H) && !defined(__LCLINT__)
pthread_mutex_t lock; /* Mutex lock for this structure. */
pthread_mutex_t lock; /* Mutex lock for this structure. */
static int ftpmagicdir = 0x8440291;
#define ISFTPMAGIC(_dir) (!memcmp((_dir), &ftpmagicdir, sizeof(ftpmagicdir)))
static int ftpmagicdir = 0x8440291;
#define ISFTPMAGIC(_dir) (!memcmp((_dir), &ftpmagicdir, sizeof(ftpmagicdir)))
static DIR * ftpOpendir(const char * path)
static DIR * ftpOpendir(const char * path)
+ /*@globals fileSystem @*/
+ /*@modifies fileSystem @*/
{
DIR * dir;
struct dirent * dp;
{
DIR * dir;
struct dirent * dp;
switch (c) {
case '/':
sb = se;
switch (c) {
case '/':
sb = se;
+ /*@switchbreak@*/ break;
case '\r':
if (sb == NULL) {
for (sb = se; sb > s && sb[-1] != ' '; sb--)
case '\r':
if (sb == NULL) {
for (sb = se; sb > s && sb[-1] != ' '; sb--)
if (*se == '\n') se++;
sb = NULL;
s = se;
if (*se == '\n') se++;
sb = NULL;
s = se;
+ /*@switchbreak@*/ break;
+ /*@switchbreak@*/ break;
}
}
nb += sizeof(*dir) + sizeof(*dp) + ((ac + 1) * sizeof(*av)) + (ac + 1);
dir = xcalloc(1, nb);
}
}
nb += sizeof(*dir) + sizeof(*dp) + ((ac + 1) * sizeof(*av)) + (ac + 1);
dir = xcalloc(1, nb);
dp = (struct dirent *) (dir + 1);
av = (const char **) (dp + 1);
dt = (char *) (av + (ac + 1));
t = (char *) (dt + ac + 1);
dp = (struct dirent *) (dir + 1);
av = (const char **) (dp + 1);
dt = (char *) (av + (ac + 1));
t = (char *) (dt + ac + 1);
dir->fd = ftpmagicdir;
dir->data = (char *) dp;
dir->fd = ftpmagicdir;
dir->data = (char *) dp;
dir->filepos = 0;
ac = 0;
dir->filepos = 0;
ac = 0;
+ /*@-dependenttrans -unrecog@*/
dt[ac] = DT_DIR; av[ac++] = t; t = stpcpy(t, "."); t++;
dt[ac] = DT_DIR; av[ac++] = t; t = stpcpy(t, ".."); t++;
dt[ac] = DT_DIR; av[ac++] = t; t = stpcpy(t, "."); t++;
dt[ac] = DT_DIR; av[ac++] = t; t = stpcpy(t, ".."); t++;
+ /*@=dependenttrans =unrecog@*/
sb = NULL;
s = se = ftpBuf;
while ((c = *se) != '\0') {
sb = NULL;
s = se = ftpBuf;
while ((c = *se) != '\0') {
switch (c) {
case '/':
sb = se;
switch (c) {
case '/':
sb = se;
+ /*@switchbreak@*/ break;
- case 'p': dt[ac] = DT_FIFO; break;
- case 'c': dt[ac] = DT_CHR; break;
- case 'd': dt[ac] = DT_DIR; break;
- case 'b': dt[ac] = DT_BLK; break;
- case '-': dt[ac] = DT_REG; break;
- case 'l': dt[ac] = DT_LNK; break;
- case 's': dt[ac] = DT_SOCK; break;
- default: dt[ac] = DT_UNKNOWN; break;
+ case 'p':
+ dt[ac] = DT_FIFO;
+ /*@innerbreak@*/ break;
+ case 'c':
+ dt[ac] = DT_CHR;
+ /*@innerbreak@*/ break;
+ case 'd':
+ dt[ac] = DT_DIR;
+ /*@innerbreak@*/ break;
+ case 'b':
+ dt[ac] = DT_BLK;
+ /*@innerbreak@*/ break;
+ case '-':
+ dt[ac] = DT_REG;
+ /*@innerbreak@*/ break;
+ case 'l':
+ dt[ac] = DT_LNK;
+ /*@innerbreak@*/ break;
+ case 's':
+ dt[ac] = DT_SOCK;
+ /*@innerbreak@*/ break;
+ default:
+ dt[ac] = DT_UNKNOWN;
+ /*@innerbreak@*/ break;
for (sb = se; sb > s && sb[-1] != ' '; sb--)
for (sb = se; sb > s && sb[-1] != ' '; sb--)
}
ac++;
t = stpncpy(t, sb, (se - sb));
}
ac++;
t = stpncpy(t, sb, (se - sb));
if (*se == '\n') se++;
sb = NULL;
s = se;
if (*se == '\n') se++;
sb = NULL;
s = se;
+ /*@switchbreak@*/ break;
+ /*@switchbreak@*/ break;
static struct dirent * ftpReaddir(DIR * dir)
static struct dirent * ftpReaddir(DIR * dir)
+ /*@globals fileSystem @*/
+ /*@modifies fileSystem @*/
{
struct dirent * dp;
const char ** av;
{
struct dirent * dp;
const char ** av;
if (dir == NULL || !ISFTPMAGIC(dir) || dir->data == NULL) {
/* XXX TODO: EBADF errno. */
return NULL;
}
if (dir == NULL || !ISFTPMAGIC(dir) || dir->data == NULL) {
/* XXX TODO: EBADF errno. */
return NULL;
}
dp = (struct dirent *) dir->data;
av = (const char **) (dp + 1);
dp = (struct dirent *) dir->data;
av = (const char **) (dp + 1);
dp->d_type = dt[i];
strncpy(dp->d_name, av[i], sizeof(dp->d_name));
dp->d_type = dt[i];
strncpy(dp->d_name, av[i], sizeof(dp->d_name));
-fprintf(stderr, "*** ftpReaddir(%p) %p \"%s\"\n", dir, dp, dp->d_name);
+fprintf(stderr, "*** ftpReaddir(%p) %p \"%s\"\n", (void *)dir, dp, dp->d_name);
+/*@=voidabstract@*/
-static int ftpClosedir(DIR * dir)
+static int ftpClosedir(/*@only@*/ DIR * dir)
+ /*@globals fileSystem @*/
+ /*@modifies dir, fileSystem @*/
-fprintf(stderr, "*** ftpClosedir(%p)\n", dir);
+fprintf(stderr, "*** ftpClosedir(%p)\n", (void *)dir);
if (dir == NULL || !ISFTPMAGIC(dir)) {
/* XXX TODO: EBADF errno. */
return -1;
}
free((void *)dir);
if (dir == NULL || !ISFTPMAGIC(dir)) {
/* XXX TODO: EBADF errno. */
return -1;
}
free((void *)dir);