From 260b73a346b5ca4aa0cd9e5b99be0e2b6e35fb84 Mon Sep 17 00:00:00 2001 From: HummyPkg Date: Sat, 11 Mar 2017 00:43:07 +0000 Subject: [PATCH] initial import --- Makefile | 12 ++++++++++++ xconv.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 Makefile create mode 100644 xconv.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..82b0846 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ + +BUILDOPTS := --notest + +export PATH := $(PATH):.. + +all: xconv.so + +xconv.so: xconv.c + ../build-jim-ext -I.. -L.. $(BUILDOPTS) $^ -lxconv + +clean: + rm -f *.o *.so diff --git a/xconv.c b/xconv.c new file mode 100644 index 0000000..4abb791 --- /dev/null +++ b/xconv.c @@ -0,0 +1,54 @@ +/* + * xconv.c -- A Jim C extension that uses libxconv to convert from + * ISO 6937 to UTF-8. + */ +#include +#include +#include +#include +#include + +static int +Xconv_Cmd(Jim_Interp *j, int argc, Jim_Obj *const argv[]) +{ + const char *src, *dst; + size_t dstlen, len; + Jim_Obj *ret; + + if (argc != 2) + { + Jim_WrongNumArgs(j, 1, argv, ""); + return JIM_ERR; + } + + src = Jim_GetString(argv[1], NULL); + dstlen = strlen(src) * 2; + dst = (char *)Jim_Alloc(dstlen + 1); + + if ((len = xconv(src, dst, dstlen))) + { +#ifdef JIM_UTF8 + int chars; + + chars = utf8_strlen(dst, len); + ret = Jim_NewStringObjUtf8(j, dst, chars); +#else + ret = Jim_NewStringObjNoAlloc(j, dst, len); +#endif + Jim_SetResult(j, ret); + } + else + { + Jim_Free(dst); + Jim_SetResult(j, argv[1]); // Increments ref count. + } + return JIM_OK; +} + +int +Jim_xconvInit(Jim_Interp *j) +{ + Jim_CreateCommand(j, "xconv", Xconv_Cmd, NULL, NULL); + return JIM_OK; +} +