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]

Reply via email to