Centralize catgets() calls through MsgCat

CDE has relied upon catgets() implementations following a relaxed
interpretation of the XPG internationalization standard that ignored
-1, the standard error value returned by catopen, as the catalog
argument. However, this same behavior causes segmentation faults with
the musl C library.

This patch:

- Centralizes (with the exception of ToolTalk) all calls to catopen(),
  catgets(), and catclose() through MsgCat within the DtSvc library.
- Prevents calls to catgets() and catclose() that rely upon
  undefined behavior.
- Eliminates a number of bespoke catgets() wrappers, including multiple
  redundant caching implementations designed to work around a design
  peculiarity in HP/UX.
- Eases building CDE without XPG internationalization support by providing
  the appropriate macros.
This commit is contained in:
Lev Kujawski
2021-01-30 20:05:13 -07:00
committed by Jon Trulson
parent 8278e0eae3
commit 7010b2c11b
241 changed files with 3153 additions and 3493 deletions

View File

@@ -179,8 +179,8 @@ void oe_initialize (void)
if (usrblk.query != NULL)
ptr = usrblk.query;
else
ptr = catgets (dtsearch_catd, MS_misc, 6, "<unknown>");
sprintf (sprintbuf, catgets (dtsearch_catd, MS_oeinit, 137,
ptr = CATGETS(dtsearch_catd, MS_misc, 6, "<unknown>");
sprintf (sprintbuf, CATGETS(dtsearch_catd, MS_oeinit, 137,
"%s User Interface version %s and Engine "
"version %s are incompatible."),
PROGNAME"137", ptr, AUSAPI_VERSION);
@@ -192,7 +192,7 @@ void oe_initialize (void)
/* Load site configuration (ocf) file and create dblks list */
if (!load_ocf()) {
sprintf (sprintbuf, catgets (dtsearch_catd, MS_oeinit, 202,
sprintf (sprintbuf, CATGETS(dtsearch_catd, MS_oeinit, 202,
"%s Initialization failed due to errors in configuration file."),
PROGNAME"202");
DtSearchAddMessage (sprintbuf);
@@ -227,7 +227,7 @@ void oe_initialize (void)
*/
if (!ve_initialize()) {
INIT_FAILED:
sprintf (sprintbuf, catgets (dtsearch_catd, MS_oeinit, 266,
sprintf (sprintbuf, CATGETS(dtsearch_catd, MS_oeinit, 266,
"%s Initialization failed due to errors in database,\n"
" language, or related files."),
PROGNAME "266");
@@ -276,7 +276,7 @@ DELETE_DB:
/* Abort if fatal dictionary load errors */
if (good_dblk_count <= 0) {
sprintf (sprintbuf, catgets (dtsearch_catd, MS_misc, 8,
sprintf (sprintbuf, CATGETS(dtsearch_catd, MS_misc, 8,
"%s No valid databases remain."),
PROGNAME"265");
DtSearchAddMessage (sprintbuf);