From 2b9d8f5bac5d2352f8021548b4852014ed683b2c Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 5 Dec 2023 15:41:28 -0800 Subject: Fix -Wincompatible-pointer-types warning from gcc (issue #1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit xlsfonts.c: In function ‘get_list’: xlsfonts.c:204:23: warning: assignment to ‘char **’ from incompatible pointer type ‘const char **’ [-Wincompatible-pointer-types] 204 | fonts = &pattern; | ^ v2: Split the open vs. list code to allow preserving the constness of the argument to get_list, at the cost of less code sharing between the two paths Closes: #1 Signed-off-by: Alan Coopersmith --- xlsfonts.c | 105 ++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 59 insertions(+), 46 deletions(-) diff --git a/xlsfonts.c b/xlsfonts.c index b834637..0afc53f 100644 --- a/xlsfonts.c +++ b/xlsfonts.c @@ -58,7 +58,7 @@ static int font_cnt = 0; static int min_max; typedef struct { - char *name; + const char *name; XFontStruct *info; } FontList; @@ -73,7 +73,7 @@ static int IgnoreError(Display *disp, XErrorEvent *event); static void PrintProperty(XFontProp *prop); static void ComputeFontType(XFontStruct *fs); static void print_character_metrics(register XFontStruct *info); -static void do_query_font(Display *dpy, char *name); +static void do_query_font(Display *dpy, const char *name); void usage(const char *errmsg) @@ -191,57 +191,70 @@ main(int argc, char **argv) static void get_list(const char *pattern) { - int available = nnames + 1, i; - char **fonts; XFontStruct *info; - /* Get list of fonts matching pattern */ - for (;;) { - if (open_instead_of_list) { - info = XLoadQueryFont(dpy, pattern); + if (open_instead_of_list) { + info = XLoadQueryFont(dpy, pattern); - if (info) { - fonts = &pattern; - available = 1; - XUnloadFont(dpy, info->fid); - } - else { - fonts = NULL; - } - break; + if (info == NULL) { + fprintf(stderr, "%s: pattern \"%s\" unmatched\n", + program_name, pattern); + return; } - if (long_list == L_MEDIUM) - fonts = XListFontsWithInfo(dpy, pattern, nnames, &available, &info); - else - fonts = XListFonts(dpy, pattern, nnames, &available); - if (fonts == NULL || available < nnames) - break; - if (long_list == L_MEDIUM) - XFreeFontInfo(fonts, info, available); - else - XFreeFontNames(fonts); - nnames = available * 2; - } - - if (fonts == NULL) { - fprintf(stderr, "%s: pattern \"%s\" unmatched\n", - program_name, pattern); - return; - } - - font_list = realloc(font_list, (font_cnt + available) * sizeof(FontList)); - if (font_list == NULL) - Fatal_Error("Out of memory!"); - for (i = 0; i < available; i++) { - font_list[font_cnt].name = fonts[i]; - if (long_list == L_MEDIUM) - font_list[font_cnt].info = info + i; - else + font_list = realloc(font_list, (font_cnt + 1) * sizeof(FontList)); + if (font_list == NULL) + Fatal_Error("Out of memory!"); + font_list[font_cnt].name = pattern; + if (long_list == L_MEDIUM) { + font_list[font_cnt].info = info; + XUnloadFont(dpy, info->fid); + } + else { font_list[font_cnt].info = NULL; - + XFreeFont(dpy, info); + } font_cnt++; } + else { + /* Get list of fonts matching pattern */ + int available = nnames + 1; + char **fonts; + + for (;;) { + if (long_list == L_MEDIUM) + fonts = XListFontsWithInfo(dpy, pattern, nnames, &available, + &info); + else + fonts = XListFonts(dpy, pattern, nnames, &available); + if (fonts == NULL) { + fprintf(stderr, "%s: pattern \"%s\" unmatched\n", + program_name, pattern); + return; + } + if (available < nnames) + break; + if (long_list == L_MEDIUM) + XFreeFontInfo(fonts, info, available); + else + XFreeFontNames(fonts); + nnames = available * 2; + } + + font_list = realloc(font_list, + (font_cnt + available) * sizeof(FontList)); + if (font_list == NULL) + Fatal_Error("Out of memory!"); + for (int i = 0; i < available; i++) { + font_list[font_cnt].name = fonts[i]; + if (long_list == L_MEDIUM) + font_list[font_cnt].info = info + i; + else + font_list[font_cnt].info = NULL; + + font_cnt++; + } + } } static int @@ -625,7 +638,7 @@ print_character_metrics(register XFontStruct *info) } static void -do_query_font(Display *display, char *name) +do_query_font(Display *display, const char *name) { register int i; register XFontStruct *info = XLoadQueryFont(display, name); -- cgit v1.2.3