jim-xconv/xconv.c

57 lines
1013 B
C
Raw Permalink Normal View History

2017-03-11 00:43:07 +00:00
/*
* xconv.c -- A Jim C extension that uses libxconv to convert from
* ISO 6937 to UTF-8.
*/
#include <stdio.h>
#include <string.h>
#include <jim.h>
#include <jim-config.h>
#include <utf8.h>
2017-03-11 00:43:07 +00:00
#include <xconv.h>
static int
Xconv_Cmd(Jim_Interp *j, int argc, Jim_Obj *const argv[])
{
2023-03-13 20:29:53 +00:00
char *src, *dst;
2017-03-11 00:43:07 +00:00
size_t dstlen, len;
Jim_Obj *ret;
if (argc != 2)
{
Jim_WrongNumArgs(j, 1, argv, "<ISO 6937 string>");
return JIM_ERR;
}
2023-03-13 20:29:53 +00:00
src = (char *)Jim_GetString(argv[1], NULL);
2017-03-11 00:43:07 +00:00
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);
2017-03-11 09:52:41 +00:00
Jim_Free(dst);
2017-03-11 00:43:07 +00:00
#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;
}