From: Michael R Sweet Date: Mon, 15 Apr 2024 00:37:11 +0000 (-0400) Subject: Update _cupsMessageLoad to accept existing strings array. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7f06d6ff77b0e04ff2646ae026b8db000da1c080;p=thirdparty%2Fcups.git Update _cupsMessageLoad to accept existing strings array. --- diff --git a/cups/dest-localization.c b/cups/dest-localization.c index 3b3845f254..69a0f7fe92 100644 --- a/cups/dest-localization.c +++ b/cups/dest-localization.c @@ -427,7 +427,7 @@ cups_create_localizations( * Got the file, read it... */ - dinfo->localizations = _cupsMessageLoad(tempfile, _CUPS_MESSAGE_STRINGS); + dinfo->localizations = _cupsMessageLoad(NULL, tempfile, _CUPS_MESSAGE_STRINGS); } DEBUG_printf("4cups_create_localizations: %d messages loaded.", cupsArrayCount(dinfo->localizations)); diff --git a/cups/language-private.h b/cups/language-private.h index 1d00497fd0..1619f6748e 100644 --- a/cups/language-private.h +++ b/cups/language-private.h @@ -59,7 +59,7 @@ extern int _cupsLangPrintf(FILE *fp, const char *message, ...) _CUPS_FORMAT(2, extern int _cupsLangPuts(FILE *fp, const char *message) _CUPS_PRIVATE; extern const char *_cupsLangString(cups_lang_t *lang, const char *message) _CUPS_PRIVATE; extern void _cupsMessageFree(cups_array_t *a) _CUPS_PRIVATE; -extern cups_array_t *_cupsMessageLoad(const char *filename, int flags) _CUPS_PRIVATE; +extern cups_array_t *_cupsMessageLoad(cups_array_t *a, const char *filename, int flags) _CUPS_PRIVATE; extern const char *_cupsMessageLookup(cups_array_t *a, const char *m) _CUPS_PRIVATE; extern cups_array_t *_cupsMessageNew(void *context) _CUPS_PRIVATE; extern int _cupsMessageSave(const char *filename, int flags, cups_array_t *a) _CUPS_PRIVATE; diff --git a/cups/language.c b/cups/language.c index 1f44a73e37..c596e25492 100644 --- a/cups/language.c +++ b/cups/language.c @@ -663,11 +663,11 @@ _cupsMessageFree(cups_array_t *a) /* I - Message array */ */ cups_array_t * /* O - New message array */ -_cupsMessageLoad(const char *filename, /* I - Message catalog to load */ - int flags) /* I - Load flags */ +_cupsMessageLoad(cups_array_t *a, /* I - Existing message array */ + const char *filename,/* I - Message catalog to load */ + int flags) /* I - Load flags */ { cups_file_t *fp; /* Message file */ - cups_array_t *a; /* Message array */ _cups_message_t *m; /* Current message */ char s[4096], /* String buffer */ *ptr, /* Pointer into buffer */ @@ -676,16 +676,19 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */ ptrlen; /* Length of string */ - DEBUG_printf("4_cupsMessageLoad(filename=\"%s\")", filename); + DEBUG_printf("4_cupsMessageLoad(a=%p, filename=\"%s\", flags=%d)", (void *)a, filename, flags); - /* - * Create an array to hold the messages... - */ - - if ((a = _cupsMessageNew(NULL)) == NULL) + if (!a) { - DEBUG_puts("5_cupsMessageLoad: Unable to allocate array!"); - return (NULL); + /* + * Create an array to hold the messages... + */ + + if ((a = _cupsMessageNew(NULL)) == NULL) + { + DEBUG_puts("5_cupsMessageLoad: Unable to allocate array!"); + return (NULL); + } } /* @@ -868,7 +871,10 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */ { if (m->str && (m->str[0] || (flags & _CUPS_MESSAGE_EMPTY))) { - cupsArrayAdd(a, m); + if (cupsArrayFind(a, m)) + cups_message_free(m, NULL); + else + cupsArrayAdd(a, m); } else { @@ -876,10 +882,7 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */ * Translation is empty, don't add it... (STR #4033) */ - free(m->msg); - if (m->str) - free(m->str); - free(m); + cups_message_free(m, NULL); } } } @@ -1047,16 +1050,14 @@ cups_message_compare(_cups_message_t *m1, /* I - First message */ * 'cups_message_free()' - Free a message. */ -static void cups_message_free(_cups_message_t *m, /* I - Message */ - void *data) /* Unused */ +static void +cups_message_free(_cups_message_t *m, /* I - Message */ + void *data)/* Unused */ { (void)data; - if (m->msg) - free(m->msg); - - if (m->str) - free(m->str); + free(m->msg); + free(m->str); free(m); } @@ -1101,7 +1102,7 @@ cups_message_load(cups_lang_t *lang) /* I - Language */ * Read the strings from the file... */ - lang->strings = _cupsMessageLoad(filename, _CUPS_MESSAGE_UNQUOTE); + lang->strings = _cupsMessageLoad(NULL, filename, _CUPS_MESSAGE_UNQUOTE); } @@ -1235,17 +1236,14 @@ cups_read_strings(cups_file_t *fp, /* I - .strings file */ if (m->msg && m->str) { - cupsArrayAdd(a, m); + if (cupsArrayFind(a, m)) + cups_message_free(m, NULL); + else + cupsArrayAdd(a, m); } else { - if (m->msg) - free(m->msg); - - if (m->str) - free(m->str); - - free(m); + cups_message_free(m, NULL); break; } diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c index 5809909a1a..679f3695ec 100644 --- a/cups/ppd-cache.c +++ b/cups/ppd-cache.c @@ -5374,7 +5374,7 @@ cups_get_strings( */ cupsCopyString(lang->language, language, sizeof(lang->language)); - lang->strings = _cupsMessageLoad(strings_file, _CUPS_MESSAGE_STRINGS); + lang->strings = _cupsMessageLoad(NULL, strings_file, _CUPS_MESSAGE_STRINGS); unlink(strings_file); } #if 0 diff --git a/locale/checkpo.c b/locale/checkpo.c index 7baf33a581..4dee78e02a 100644 --- a/locale/checkpo.c +++ b/locale/checkpo.c @@ -69,9 +69,9 @@ main(int argc, /* I - Number of command-line args */ */ if (strstr(argv[i], ".strings")) - po = _cupsMessageLoad(argv[i], _CUPS_MESSAGE_STRINGS); + po = _cupsMessageLoad(NULL, argv[i], _CUPS_MESSAGE_STRINGS); else - po = _cupsMessageLoad(argv[i], _CUPS_MESSAGE_PO | _CUPS_MESSAGE_EMPTY); + po = _cupsMessageLoad(NULL, argv[i], _CUPS_MESSAGE_PO | _CUPS_MESSAGE_EMPTY); if (!po) {