7 #if defined(HAVE_MAGIC_H)
15 #define _RPMMG_INTERNAL
30 #if defined(HAVE_MAGIC_H)
36 mg->fn =
_free(mg->fn);
49 if (_rpmmgPool == NULL) {
64 #if defined(HAVE_MAGIC_H)
65 mg->flags = (flags ? flags : MAGIC_CHECK);
66 mg->ms = magic_open(flags);
68 xx = magic_load(mg->ms, mg->fn);
71 (fn ? fn :
"(nil)"), magic_error(mg->ms));
76 flags, strerror(
errno));
86 const char * t = NULL;
89 fprintf(stderr,
"--> rpmmgFile(%p, %s)\n", mg, (fn ? fn :
"(nil)"));
91 #if defined(HAVE_MAGIC_H)
93 const char * lpath = NULL;
105 fd =
Fopen(fn,
"r.ufdio");
106 if (fd != NULL && !
Ferror(fd)) {
107 nb =
Fread(b, 1,
sizeof(b), fd);
122 char *old_ctype =
setlocale(LC_CTYPE, NULL);
123 char *old_collate =
setlocale(LC_COLLATE, NULL);
126 old_ctype =
xstrdup(old_ctype);
130 old_collate =
xstrdup(old_collate);
134 t = magic_file(mg->ms, fn);
146 const char * msg = magic_error(mg->ms);
147 if (strstr(msg,
"regexec error 17, (match failed)") == NULL)
149 (fn ? fn :
"(nil)"), msg);
157 if (t == NULL) t =
"";
161 fprintf(stderr,
"<-- rpmmgFile(%p, %s) %s\n", mg, (fn ? fn :
"(nil)"), t);
167 const char * t = NULL;
170 fprintf(stderr,
"--> rpmmgBuffer(%p, %p[%d])\n", mg, b, (
int)nb);
171 if (nb == 0) nb = strlen(b);
172 #if defined(HAVE_MAGIC_H)
174 t = magic_buffer(mg->ms, b, nb);
177 const char * msg = magic_error(mg->ms);
178 if (strstr(msg,
"regexec error 17, (match failed)") == NULL)
180 b, (
unsigned)nb, msg);
185 if (t == NULL) t =
"";
189 fprintf(stderr,
"<-- rpmmgBuffer(%p, %p[%d]) %s\n", mg, b, (
int)nb, t);
const char * rpmmgFile(rpmmg mg, const char *fn)
Return magic string for a file.
char * xstrdup(const char *str)
FD_t Fopen(const char *path, const char *_fmode)
fopen(3) clone.
static void rpmlog(int code, const char *fmt,...)
static rpmmg rpmmgGetPool(rpmioPool pool)
Yet Another syslog(3) API clone.
rpmioItem rpmioGetPool(rpmioPool pool, size_t size)
Get unused item from pool, or alloc a new item.
#define setlocale(Category, Locale)
static void rpmmgFini(void *_mg)
The FD_t File Handle data structure.
rpmmg rpmmgLink(rpmmg mg)
Reference a magic wrapper instance.
rpmmg rpmmgNew(const char *fn, int flags)
Create and load a magic wrapper.
size_t Fread(void *buf, size_t size, size_t nmemb, FD_t fd)
fread(3) clone.
const char * rpmmgBuffer(rpmmg mg, const char *b, size_t nb)
Return magic string for a buffer.
int Fclose(FD_t fd)
fclose(3) clone.
const char const bson int mongo_write_concern int flags
int Ferror(FD_t fd)
ferror(3) clone.
urltype urlPath(const char *url, const char **pathp)
Return path component of URL.
rpmioPool rpmioNewPool(const char *name, size_t size, int limit, int flags, char *(*dbg)(void *item), void(*init)(void *item), void(*fini)(void *item))
Create a memory pool.
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
rpmmg rpmmgFree(rpmmg mg)
Destroy a magic wrapper.