summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2011-11-17 14:49:02 +0100
committerNatanael Copa <ncopa@alpinelinux.org>2011-11-17 14:55:13 +0100
commitf110c93c3a788f53c3515ede62997230c4a1d063 (patch)
tree57ab7831aaf87c72f2d5034dfc84ff053583c307
downloadlua-file-magic-f110c93c3a788f53c3515ede62997230c4a1d063.tar.bz2
lua-file-magic-f110c93c3a788f53c3515ede62997230c4a1d063.tar.xz
Initial commit
We have constants and api defined
-rw-r--r--.gitignore2
-rw-r--r--Makefile20
-rw-r--r--README2
-rw-r--r--magic.c99
4 files changed, 123 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9d22eb4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*.o
+*.so
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ba78215
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,20 @@
+
+VERSION = 0.1
+GIT_REV := $(shell test -d .git && git describe || echo exported)
+ifneq ($(GIT_REV), exported)
+FULL_VERSION := $(GIT_REV)
+FULL_VERSION := $(patsubst v%,%,$(FULL_VERSION))
+else
+FULL_VERSION := $(VERSION)
+endif
+
+
+OBJS = magic.o
+LIBS = -lmagic
+
+CFLAGS ?= -g
+CFLAGS += -fPIC
+
+magic.so: $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ -fPIC -shared $^ $(LIBS)
+
diff --git a/README b/README
new file mode 100644
index 0000000..6733b80
--- /dev/null
+++ b/README
@@ -0,0 +1,2 @@
+Lua binding to libmagic
+
diff --git a/magic.c b/magic.c
new file mode 100644
index 0000000..44e7703
--- /dev/null
+++ b/magic.c
@@ -0,0 +1,99 @@
+/* Copyright Natanael Copa 2011
+
+LGPL
+
+*/
+
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
+
+#include <magic.h>
+
+#define MODULE_NAME "magic"
+#define MODULE_VERSION "0.1"
+#define MAGIC_META "magic"
+
+struct magic_constmap {
+ const char *name;
+ int value;
+} constmap[] = {
+ { "NONE", MAGIC_NONE },
+ { "DEBUG", MAGIC_DEBUG },
+ { "SYMLINK", MAGIC_SYMLINK },
+ { "COMPRESS", MAGIC_COMPRESS },
+ { "DEVICES", MAGIC_DEVICES },
+ { "MIME_TYPE", MAGIC_MIME_TYPE },
+ { "CONTINUE", MAGIC_CONTINUE },
+ { "CHECK", MAGIC_CHECK },
+ { "PRESERVE_ATIME", MAGIC_PRESERVE_ATIME },
+ { "RAW", MAGIC_RAW },
+ { "ERROR", MAGIC_ERROR },
+ { "MIME_ENCODING", MAGIC_MIME_ENCODING },
+ { "APPLE", MAGIC_APPLE },
+ { "NO_CHECK_COMPRESS", MAGIC_NO_CHECK_COMPRESS },
+ { "NO_CHECK_TAR", MAGIC_NO_CHECK_TAR },
+ { "NO_CHECK_SOFT", MAGIC_NO_CHECK_SOFT },
+ { "NO_CHECK_APPTYPE", MAGIC_NO_CHECK_APPTYPE },
+ { "NO_CHECK_ELF", MAGIC_NO_CHECK_ELF },
+ { "NO_CHECK_TEXT", MAGIC_NO_CHECK_TEXT },
+ { "NO_CHECK_CDF", MAGIC_NO_CHECK_CDF },
+ { "NO_CHECK_TOKENS", MAGIC_NO_CHECK_TOKENS },
+ { "NO_CHECK_ENCODING", MAGIC_NO_CHECK_ENCODING },
+ { "NO_CHECK_BUILTIN", MAGIC_NO_CHECK_BUILTIN },
+ { "NO_CHECK_TEXT", MAGIC_NO_CHECK_TEXT },
+ { "NO_CHECK_FORTRAN", MAGIC_NO_CHECK_FORTRAN },
+ { "NO_CHECK_TROFF", MAGIC_NO_CHECK_TROFF },
+ { NULL, 0},
+};
+
+static void init_consts(lua_State *L)
+{
+ int i;
+ for (i = 0; constmap[i].name != NULL; i++) {
+ lua_pushstring(L, constmap[i].name);
+ lua_pushnumber(L, constmap[i].value);
+ lua_settable(L, -3);
+ }
+}
+
+static int Ptodo(lua_State *L)
+{
+ printf("todo\n");
+ return 0;
+}
+
+static const luaL_reg Pmagic_methods[] = {
+ {"open", Ptodo},
+ {"close", Ptodo},
+ {"getpath", Ptodo},
+ {"file", Ptodo},
+ {"descriptor", Ptodo},
+ {"buffer", Ptodo},
+ {"error", Ptodo},
+ {"setflags", Ptodo},
+ {"load", Ptodo},
+ {"compile", Ptodo},
+ {"check", Ptodo},
+ {"list", Ptodo},
+ {"errno", Ptodo},
+ {NULL, NULL}
+};
+
+static const luaL_reg Pmeta_methods[] = {
+ {"__gc", Ptodo},
+ {NULL, NULL},
+};
+
+LUALIB_API int luaopen_magic(lua_State *L)
+{
+ luaL_openlib(L, MODULE_NAME, Pmagic_methods, 0);
+ lua_pushliteral(L, "version");
+ lua_pushliteral(L, MODULE_VERSION);
+ lua_settable(L, -3);
+
+ init_consts(L);
+
+
+}
+