From 6a519db71998fbb8d2ea4fdd749494d77bf2e98f Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 8 Jan 2023 15:44:39 +0100 Subject: Improve libfonts_get_default_font_name and draft implementation of libfonts_get_default_font MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libfonts_get_default_font_name.c | 93 +++++++++++++--------------------------- 1 file changed, 30 insertions(+), 63 deletions(-) (limited to 'libfonts_get_default_font_name.c') diff --git a/libfonts_get_default_font_name.c b/libfonts_get_default_font_name.c index 9165d8a..66d14cb 100644 --- a/libfonts_get_default_font_name.c +++ b/libfonts_get_default_font_name.c @@ -3,11 +3,10 @@ #ifndef TEST -ssize_t -libfonts_get_default_font_name(enum libfonts_default_font font, char *name, size_t size, size_t index) +int +libfonts_get_default_font_name(enum libfonts_default_font font, size_t index, const char **namep) { - const char *alias; - size_t len; + const char *alias = NULL; if (font == LIBFONTS_DEFAULT_SANS_SERIF) { if (index == 0) @@ -16,37 +15,25 @@ libfonts_get_default_font_name(enum libfonts_default_font font, char *name, size alias = "sans serif"; else if (index == 2) alias = "sans"; - else - return 0; } else if (font == LIBFONTS_DEFAULT_SERIF) { if (index == 0) alias = "serif"; - else - return 0; } else if (font == LIBFONTS_DEFAULT_MONOSPACE) { if (index == 0) alias = "monospace"; else if (index == 1) alias = "monospaced"; - else - return 0; } else { errno = EINVAL; return -1; } - len = strlen(alias); - if (size) { - size -= 1; - if (size > len) - size = len; - memcpy(name, alias, size); - name[size] = '\0'; - } - return (ssize_t)(len + 1); + if (namep) + *namep = alias; + return alias != NULL; } @@ -56,68 +43,48 @@ libfonts_get_default_font_name(enum libfonts_default_font font, char *name, size int main(void) { -#define T(FONT, INDEX, SIZE, NAME, NAMELEN)\ + const char *r; + +#define T(FONT, INDEX, NAME)\ do {\ errno = 0;\ - ASSERT(libfonts_get_default_font_name(FONT, buf, SIZE, INDEX) == NAMELEN);\ - ASSERT(!buf[SIZE - 1]);\ - ASSERT(!strcmp(buf, NAME));\ + ASSERT(libfonts_get_default_font_name(FONT, INDEX, &r) == 1);\ + ASSERT(r != NULL);\ + ASSERT(!strcmp(r, NAME));\ + ASSERT(!errno);\ + ASSERT(libfonts_get_default_font_name(FONT, INDEX, NULL) == 1);\ ASSERT(!errno);\ } while (0) -#define X(FONT, INDEX, SIZE)\ +#define X(FONT, INDEX)\ do {\ errno = 0;\ - ASSERT(libfonts_get_default_font_name(FONT, buf, SIZE, INDEX) == 0);\ - ASSERT(!buf[SIZE - 1]);\ + ASSERT(libfonts_get_default_font_name(FONT, INDEX, &r) == 0);\ + ASSERT(r == NULL);\ + ASSERT(!errno);\ + ASSERT(libfonts_get_default_font_name(FONT, INDEX, NULL) == 0);\ ASSERT(!errno);\ } while (0) - char buf[50]; - errno = 0; - ASSERT(libfonts_get_default_font_name(-1, buf, sizeof(buf), 0) == -1); + ASSERT(libfonts_get_default_font_name(-1, 0, &r) == -1); ASSERT(errno == EINVAL); errno = 0; - ASSERT(libfonts_get_default_font_name(99, buf, sizeof(buf), 0) == -1); + ASSERT(libfonts_get_default_font_name(99, 0, &r) == -1); ASSERT(errno == EINVAL); - T(LIBFONTS_DEFAULT_SANS_SERIF, 0, sizeof(buf), "sans-serif", 11); - T(LIBFONTS_DEFAULT_SANS_SERIF, 1, sizeof(buf), "sans serif", 11); - T(LIBFONTS_DEFAULT_SANS_SERIF, 2, sizeof(buf), "sans", 5); - X(LIBFONTS_DEFAULT_SANS_SERIF, 3, sizeof(buf)); - - T(LIBFONTS_DEFAULT_SERIF, 0, sizeof(buf), "serif", 6); - X(LIBFONTS_DEFAULT_SERIF, 1, sizeof(buf)); - - T(LIBFONTS_DEFAULT_MONOSPACE, 0, sizeof(buf), "monospace", 10); - T(LIBFONTS_DEFAULT_MONOSPACE, 1, sizeof(buf), "monospaced", 11); - X(LIBFONTS_DEFAULT_MONOSPACE, 2, sizeof(buf)); - - T(LIBFONTS_DEFAULT_SANS_SERIF, 0, 4, "san", 11); - T(LIBFONTS_DEFAULT_SANS_SERIF, 1, 4, "san", 11); - T(LIBFONTS_DEFAULT_SANS_SERIF, 2, 4, "san", 5); - X(LIBFONTS_DEFAULT_SANS_SERIF, 3, 4); - - T(LIBFONTS_DEFAULT_SERIF, 0, 4, "ser", 6); - X(LIBFONTS_DEFAULT_SERIF, 1, 4); - - T(LIBFONTS_DEFAULT_MONOSPACE, 0, 4, "mon", 10); - T(LIBFONTS_DEFAULT_MONOSPACE, 1, 4, "mon", 11); - X(LIBFONTS_DEFAULT_MONOSPACE, 2, 4); - - errno = 0; - - ASSERT(libfonts_get_default_font_name(LIBFONTS_DEFAULT_SANS_SERIF, NULL, 0, 0) == 11); - ASSERT(libfonts_get_default_font_name(LIBFONTS_DEFAULT_SERIF, NULL, 0, 0) == 6); - ASSERT(libfonts_get_default_font_name(LIBFONTS_DEFAULT_MONOSPACE, NULL, 0, 0) == 10); + T(LIBFONTS_DEFAULT_SANS_SERIF, 0, "sans-serif"); + T(LIBFONTS_DEFAULT_SANS_SERIF, 1, "sans serif"); + T(LIBFONTS_DEFAULT_SANS_SERIF, 2, "sans"); + X(LIBFONTS_DEFAULT_SANS_SERIF, 3); - ASSERT(libfonts_get_default_font_name(LIBFONTS_DEFAULT_SANS_SERIF, NULL, 0, 3) == 0); - ASSERT(libfonts_get_default_font_name(LIBFONTS_DEFAULT_SERIF, NULL, 0, 1) == 0); - ASSERT(libfonts_get_default_font_name(LIBFONTS_DEFAULT_MONOSPACE, NULL, 0, 2) == 0); + T(LIBFONTS_DEFAULT_SERIF, 0, "serif"); + X(LIBFONTS_DEFAULT_SERIF, 1); - ASSERT(!errno); + T(LIBFONTS_DEFAULT_MONOSPACE, 0, "monospace"); + T(LIBFONTS_DEFAULT_MONOSPACE, 1, "monospaced"); + X(LIBFONTS_DEFAULT_MONOSPACE, 2); return 0; } -- cgit v1.2.3-70-g09d2