Hi FRIGN,

It's been a while since I posted to this list. I do still maintain
libutf, though -- glad to hear it's still being of use.

It sounds like it might be a good idea to add these to the library.
However, I have some simplification suggestions, especially to avoid
memory allocation inside libutf. I've attached a file illustrating the
functions as I think they should be (albeit untested). Your
'chartorunearr' could, in this case, be implemented like so:

> Rune *p = emalloc((utflen(s) + 1) * sizeof *p);
> utftorunestr(s, p);

Does this seem alright to you?

I don't have strong opinions on the 'where to put them' question. I
suppose we could split out every function into its own file, as others
have suggested. On the other hand, if 'utftorunestr' were to go in a
larger file of functions then I would actually suggest a runestr.c,
which doesn't exist yet but may as well; see runestrcat(3).

Thanks,
cls
/* See LICENSE file for copyright and license details. */
#include <stdio.h>
#include "utf.h"

int
utftorunestr(const char *s, Rune *p)
{
	int i, n;

	for(i = 0; (n = chartorune(&p[i], s)), p[i] != 0; i++)
		s += n;
	return i;
}

int
fgetrune(Rune *p, FILE *fp)
{
	char buf[UTFmax];
	int c, i = 0;

	do {
		if((c = fgetc(fp)) == EOF)
			break;
		buf[i++] = c;
	} while(!fullrune(buf, i));

	if(i == 0)
		return EOF;

	return charntorune(p, buf, i);
}

int
fputrune(const Rune *p, FILE *fp)
{
	char buf[UTFmax];

	return fwrite(buf, runetochar(buf, p), 1, fp);
}

Reply via email to