diff options
author | June McEnroe <june@causal.agency> | 2020-02-04 21:27:52 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-02-04 21:27:52 -0500 |
commit | 0df8bd51aa70cfa66951e8f08a6a3dce3fd45dec (patch) | |
tree | fa1bb14d076d228242e97a807be3b8ddca62c391 | |
parent | Model keyCtrl like keyMeta (diff) | |
download | catgirl-0df8bd51aa70cfa66951e8f08a6a3dce3fd45dec.tar.gz catgirl-0df8bd51aa70cfa66951e8f08a6a3dce3fd45dec.zip |
Convert editHead and editTail from wchar_t
Diffstat (limited to '')
-rw-r--r-- | edit.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/edit.c b/edit.c index 446e0e9..e142507 100644 --- a/edit.c +++ b/edit.c @@ -14,17 +14,31 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -#include <err.h> +#include <assert.h> +#include <limits.h> #include <stdio.h> #include <stdlib.h> -#include <sysexits.h> +#include <wchar.h> #include "chat.h" +enum { Cap = 512 }; +static wchar_t buf[Cap] = L"foo\0033bar\3baz"; +static size_t len = 12; +static size_t pos = 6; + const char *editHead(void) { - return "foo\0033bar"; + static char mbs[MB_LEN_MAX * Cap]; + const wchar_t *ptr = buf; + size_t n = wcsnrtombs(mbs, &ptr, pos, sizeof(mbs), NULL); + assert(n != (size_t)-1); + return mbs; } const char *editTail(void) { - return "baz\3"; + static char mbs[MB_LEN_MAX * Cap]; + const wchar_t *ptr = &buf[pos]; + size_t n = wcsnrtombs(mbs, &ptr, len - pos, sizeof(mbs), NULL); + assert(n != (size_t)-1); + return mbs; } |