inline int magic_setflags_wrapper(struct magic_set *ms, int flags) { if (flags < MAGIC_NONE || flags > MAGIC_NO_CHECK_BUILTIN) { errno = EINVAL; return -EINVAL; } return magic_setflags(ms, flags); }
int main(int argc, char *argv[]) { const char *magic_result; magic_t magic_cookie; int ret = EXIT_FAILURE; const int MAGIC_FLAGS_LENGTH = 3; struct magic_flag_s magic_flags[] = { mk_magic_flag(MAGIC_NONE), mk_magic_flag(MAGIC_MIME), mk_magic_flag(MAGIC_MIME_ENCODING), }; // Function magic_open() takes flags that modify libmagic's behaviour, but // they can be modified later by using function magic_setflags(). magic_cookie = magic_open(MAGIC_NONE); if (magic_cookie == NULL) { printf("Unable to initialize libmagic.\n"); goto fail; } // NULL - Using default database, it is possible to specify your own. if (magic_load(magic_cookie, NULL) != 0) { printf("Failed while loading magic database: %s\n", magic_error(magic_cookie)); goto fail_with_cleanup; } for (int i = 1; i < argc; i++) { for (int j = 0; j < MAGIC_FLAGS_LENGTH; j++) { magic_setflags(magic_cookie, magic_flags[j].value); // I'm assuming that magic_file() returns pointer to some allocated // memmory associated with magic_cookie and therefore it's not // necessary to dealocate it afterwards. magic_result = magic_file(magic_cookie, argv[i]); if (magic_result != NULL) { printf("Result with %s flag: %s\n", magic_flags[j].string, magic_result); } } } ret = EXIT_SUCCESS; fail_with_cleanup: magic_close(magic_cookie); fail: return ret; }
QueryData genMagicData(QueryContext& context) { QueryData results; magic_t magic_cookie = nullptr; // No default flags magic_cookie = magic_open(MAGIC_NONE); if (magic_cookie == nullptr) { VLOG(1) << "Unable to initialize magic library"; return results; } if (magic_load(magic_cookie, nullptr) != 0) { VLOG(1) << "Unable to load magic database : " << magic_error(magic_cookie); magic_close(magic_cookie); return results; } // Iterate through all the provided paths auto paths = context.constraints["path"].getAll(EQUALS); for (const auto& path_string : paths) { Row r; r["path"] = path_string; r["data"] = magic_file(magic_cookie, path_string.c_str()); // Retrieve MIME type magic_setflags(magic_cookie, MAGIC_MIME_TYPE); r["mime_type"] = magic_file(magic_cookie, path_string.c_str()); // Retrieve MIME encoding magic_setflags(magic_cookie, MAGIC_MIME_ENCODING); r["mime_encoding"] = magic_file(magic_cookie, path_string.c_str()); results.push_back(r); } magic_close(magic_cookie); return results; }
static PyObject* py_magic_setflags(PyObject* self, PyObject* args) { PyObject *pycookie; magic_t cookie; int flags; int result; if(!(PyArg_ParseTuple(args, "Oi", &pycookie, &flags))) return NULL; cookie = PyCObject_AsVoidPtr(pycookie); result = magic_setflags(cookie, flags); return PyInt_FromLong(result); }
inline int magic_setflags_wrapper(struct magic_set *ms, int flags) { if (flags < MAGIC_NONE || flags > MAGIC_NO_CHECK_BUILTIN) { errno = EINVAL; return -EINVAL; } #if !defined(HAVE_UTIME) && !defined(HAVE_UTIMES) if (flags & MAGIC_PRESERVE_ATIME) { errno = ENOSYS; return -ENOSYS; } #endif return magic_setflags(ms, flags); }
R_API void r_magic_setflags(RMagic* m, int f) { magic_setflags (m, f); }