RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: [EMAIL PROTECTED]
Module: rpm Date: 01-Aug-2007 20:21:57
Branch: HEAD Handle: 2007080119215700
Modified files:
rpm/rpmio tmagic.c
Log:
mostly complete rpmmg libmagic wrappers.
Summary:
Revision Changes Path
1.4 +62 -33 rpm/rpmio/tmagic.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/rpmio/tmagic.c
============================================================================
$ cvs diff -u -r1.3 -r1.4 tmagic.c
--- rpm/rpmio/tmagic.c 1 Aug 2007 13:24:00 -0000 1.3
+++ rpm/rpmio/tmagic.c 1 Aug 2007 18:21:57 -0000 1.4
@@ -2,6 +2,7 @@
#include <rpmio_internal.h>
#include <rpmmessages.h>
+#include <rpmerr.h>
#include <rpmmacro.h>
#include <popt.h>
@@ -9,68 +10,96 @@
#include "debug.h"
-static int _debug = 0;
+static int _rpmmg_debug = -1;
#define FNPATH "tmagic"
static char * fnpath = FNPATH;
-typedef struct rpmmp_t * rpmmp;
+typedef struct rpmmg_t * rpmmg;
-struct rpmmp_t {
+struct rpmmg_t {
const char * fn;
int flags;
magic_t ms;
};
static
-rpmmp rpmmpFree(rpmmp mp)
+rpmmg rpmmgFree(rpmmg mg)
{
- if (mp) {
- if (mp->ms) {
- magic_close(mp->ms);
- mp->ms = NULL;
+if (_rpmmg_debug)
+fprintf(stderr, "--> rpmmgFree(%p)\n", mg);
+ if (mg) {
+ if (mg->ms) {
+ magic_close(mg->ms);
+ mg->ms = NULL;
}
- mp->fn = _free(mp->fn);
- mp = _free(mp);
+ mg->fn = _free(mg->fn);
+ mg = _free(mg);
}
return NULL;
}
static
-rpmmp rpmmpNew(const char * fn, int flags)
+rpmmg rpmmgNew(const char * fn, int flags)
{
- rpmmp mp = xcalloc(1, sizeof(*mp));
+ rpmmg mg = xcalloc(1, sizeof(*mg));
int xx;
if (fn)
- mp->fn = xstrdup(fn);
- mp->flags = (flags ? flags : MAGIC_CHECK);
- mp->ms = magic_open(mp->ms);
- if (mp->ms == NULL)
- return rpmmpFree(mp);
- xx = magic_load(mp->ms, mp->fn);
- return mp;
+ mg->fn = xstrdup(fn);
+ mg->flags = (flags ? flags : MAGIC_CHECK);
+ mg->ms = magic_open(flags);
+ if (mg->ms == NULL) {
+ rpmError(RPMERR_EXEC, _("magic_open(0x%x) failed: %s\n"),
+ flags, strerror(errno));
+ return rpmmgFree(mg);
+ }
+ xx = magic_load(mg->ms, mg->fn);
+ if (xx == -1) {
+ rpmError(RPMERR_EXEC, _("magic_load(ms, \"%s\") failed: %s\n"),
+ fn, magic_error(mg->ms));
+ return rpmmgFree(mg);
+ }
+
+if (_rpmmg_debug)
+fprintf(stderr, "--> rpmmgNew(%s, 0x%x) mg %p\n", fn, flags, mg);
+ return mg;
}
static
-const char * rpmmpBuffer(rpmmp mp, const char * b, size_t nb)
+const char * rpmmgFile(rpmmg mg, const char *fn)
{
const char * t = NULL;
- if (mp->ms) {
- t = magic_buffer(mp->ms, b, nb);
- t = xstrdup((t ? t : ""));
- }
+ if (mg->ms)
+ t = magic_file(mg->ms, fn);
+ t = xstrdup((t ? t : ""));
+
+if (_rpmmg_debug)
+fprintf(stderr, "--> rpmmgFile(%p, %s) %s\n", mg, fn, t);
+ return t;
+}
+
+static
+const char * rpmmgBuffer(rpmmg mg, const char * b, size_t nb)
+{
+ const char * t = NULL;
+
+ if (mg->ms)
+ t = magic_buffer(mg->ms, b, nb);
+ t = xstrdup((t ? t : ""));
+if (_rpmmg_debug)
+fprintf(stderr, "--> rpmmgBuffer(%p, %p[%d]) %s\n", mg, b, nb, t);
return t;
}
static
-void readFile(rpmmp mp, const char * path)
+void readFile(rpmmg mg, const char * path)
{
FD_t fd;
-fprintf(stderr, "===== %s(%p, %s)\n", __FUNCTION__, mp, path);
+fprintf(stderr, "===== %s(%p, %s)\n", __FUNCTION__, mg, path);
fd = Fopen(path, "r");
if (fd != NULL) {
char buf[BUFSIZ];
@@ -78,7 +107,7 @@
(void) Fclose(fd);
if (len > 0) {
- const char * magic = rpmmpBuffer(mp, buf, len);
+ const char * magic = rpmmgBuffer(mg, buf, len);
fprintf(stderr, "==> magic \"%s\"\n", magic);
magic = _free(magic);
}
@@ -86,7 +115,7 @@
}
static struct poptOption optionsTable[] = {
- { "debug", 'd', POPT_ARG_VAL, &_debug, -1, NULL, NULL },
+ { "debug", 'd', POPT_ARG_VAL, &_rpmmg_debug, -1, NULL,
NULL },
{ "ftpdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_ftp_debug, -1,
N_("debug protocol data stream"), NULL},
{ "rpmiodebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmio_debug,
-1,
@@ -102,7 +131,7 @@
main(int argc, const char *argv[])
{
poptContext optCon = poptGetContext(argv[0], argc, argv, optionsTable,
0);
- rpmmp mp;
+ rpmmg mg;
int rc;
while ((rc = poptGetNextOpt(optCon)) > 0) {
@@ -116,14 +145,14 @@
}
- if (_debug) {
+ if (_rpmmg_debug) {
rpmIncreaseVerbosity();
rpmIncreaseVerbosity();
}
- mp = rpmmpNew(NULL, 0);
- readFile(mp, fnpath);
- mp = rpmmpFree(mp);
+ mg = rpmmgNew(NULL, 0);
+ readFile(mg, fnpath);
+ mg = rpmmgFree(mg);
/[EMAIL PROTECTED]@*/ urlFreeCache();
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository [email protected]