aboutsummaryrefslogtreecommitdiffstats
path: root/libfonts_get_default_font_name.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2023-01-08 15:44:39 +0100
committerMattias Andrée <maandree@kth.se>2023-01-08 15:44:39 +0100
commit6a519db71998fbb8d2ea4fdd749494d77bf2e98f (patch)
tree2817d313ba721b245f88598aab0a824e5c0e8f56 /libfonts_get_default_font_name.c
parentm (diff)
downloadlibfonts-6a519db71998fbb8d2ea4fdd749494d77bf2e98f.tar.gz
libfonts-6a519db71998fbb8d2ea4fdd749494d77bf2e98f.tar.bz2
libfonts-6a519db71998fbb8d2ea4fdd749494d77bf2e98f.tar.xz
Improve libfonts_get_default_font_name and draft implementation of libfonts_get_default_font
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'libfonts_get_default_font_name.c')
-rw-r--r--libfonts_get_default_font_name.c93
1 files changed, 30 insertions, 63 deletions
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;
}