Commit d2671c28 authored by Alan Coopersmith's avatar Alan Coopersmith Committed by Ulrich Sibiller

Constify lc_name argument to _XlcLocaleDirName() & _XlcLocaleLibDirName()

Makes code considerably less crufty and clears gcc warnings: XlcDL.c: In function '_XlcDynamicLoad': XlcDL.c:384:44: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] XlcDL.c:386:51: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] Signed-off-by: 's avatarAlan Coopersmith <alan.coopersmith@oracle.com> Backported-to-NX-by: 's avatarUlrich Sibiller <uli42@gmx.de>
parent 22377a79
...@@ -381,9 +381,9 @@ _XlcDynamicLoad(const char *lc_name) ...@@ -381,9 +381,9 @@ _XlcDynamicLoad(const char *lc_name)
if (lc_name == NULL) return (XLCd)NULL; if (lc_name == NULL) return (XLCd)NULL;
if (_XlcLocaleDirName(lc_dir, BUFSIZE, (char *)lc_name) == (char *)NULL) if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL)
return (XLCd)NULL; return (XLCd)NULL;
if (_XlcLocaleLibDirName(lc_lib_dir, BUFSIZE, (char *)lc_name) == (char*)NULL) if (_XlcLocaleLibDirName(lc_lib_dir, BUFSIZE, lc_name) == NULL)
return (XLCd)NULL; return (XLCd)NULL;
resolve_object(lc_dir, lc_name); resolve_object(lc_dir, lc_name);
...@@ -510,7 +510,7 @@ _XDynamicUnRegisterIMInstantiateCallback( ...@@ -510,7 +510,7 @@ _XDynamicUnRegisterIMInstantiateCallback(
XPointer client_data) XPointer client_data)
{ {
char lc_dir[BUFSIZE]; char lc_dir[BUFSIZE];
char *lc_name; const char *lc_name;
dynamicUnregisterProcp im_unregisterIM = (dynamicUnregisterProcp)NULL; dynamicUnregisterProcp im_unregisterIM = (dynamicUnregisterProcp)NULL;
Bool ret_flag = False; Bool ret_flag = False;
int count; int count;
......
...@@ -207,13 +207,13 @@ extern int _XlcResolveI18NPath( ...@@ -207,13 +207,13 @@ extern int _XlcResolveI18NPath(
extern char *_XlcLocaleLibDirName( extern char *_XlcLocaleLibDirName(
char* /* dir_name */, char* /* dir_name */,
size_t, /* dir_len */ size_t, /* dir_len */
char* /* lc_name */ const char* /* lc_name */
); );
extern char *_XlcLocaleDirName( extern char *_XlcLocaleDirName(
char* /* dir_name */, char* /* dir_name */,
size_t, /* dir_len */ size_t, /* dir_len */
char* /* lc_name */ const char* /* lc_name */
); );
extern XPointer _XlcCreateLocaleDataBase( extern XPointer _XlcCreateLocaleDataBase(
......
...@@ -615,14 +615,14 @@ _XlcResolveI18NPath(char *buf, int buf_len) ...@@ -615,14 +615,14 @@ _XlcResolveI18NPath(char *buf, int buf_len)
} }
char * char *
_XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name) _XlcLocaleDirName(char *dir_name, size_t dir_len, const char *lc_name)
{ {
char dir[PATH_MAX], buf[PATH_MAX], *name = NULL; char dir[PATH_MAX], buf[PATH_MAX];
int i, n; int i, n;
char *args[NUM_LOCALEDIR]; char *args[NUM_LOCALEDIR];
static char locale_alias[] = LOCALE_ALIAS; static char locale_alias[] = LOCALE_ALIAS;
char *target_name = (char*)0; char *target_name = NULL;
char *target_dir = (char*)0; char *target_dir = NULL;
char *nlc_name = NULL; char *nlc_name = NULL;
static char* last_dir_name = 0; static char* last_dir_name = 0;
static size_t last_dir_len = 0; static size_t last_dir_len = 0;
...@@ -637,6 +637,8 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name) ...@@ -637,6 +637,8 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name)
xlocaledir (dir, PATH_MAX); xlocaledir (dir, PATH_MAX);
n = _XlcParsePath(dir, args, 256); n = _XlcParsePath(dir, args, 256);
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
char *name = NULL;
if (args[i] == NULL) if (args[i] == NULL)
continue; continue;
...@@ -651,18 +653,15 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name) ...@@ -651,18 +653,15 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name)
} }
} }
/* If name is not an alias, use lc_name for locale.dir search */
if (name == NULL)
name = lc_name;
/* look at locale.dir */ /* look at locale.dir */
target_dir = args[i]; target_dir = args[i];
if (snprintf(buf, PATH_MAX, "%s/locale.dir", target_dir) < PATH_MAX) { if (snprintf(buf, PATH_MAX, "%s/locale.dir", target_dir) < PATH_MAX) {
target_name = resolve_name(name, buf, RtoL); /* If name is not an alias, use lc_name for locale.dir search */
target_name = resolve_name(name ? name : lc_name, buf, RtoL);
} }
if (name != lc_name) Xfree(name);
Xfree(name); name = NULL;
if (target_name != NULL) { if (target_name != NULL) {
char *p = 0; char *p = 0;
if ((p = strstr(target_name, "/XLC_LOCALE"))) { if ((p = strstr(target_name, "/XLC_LOCALE"))) {
...@@ -672,27 +671,15 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name) ...@@ -672,27 +671,15 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name)
Xfree(target_name); Xfree(target_name);
target_name = NULL; target_name = NULL;
} }
name = NULL;
} }
if (nlc_name) Xfree(nlc_name); if (nlc_name) Xfree(nlc_name);
if (target_name == NULL) { if (target_name == NULL)
/* vendor locale name == Xlocale name, no expansion of alias */ /* vendor locale name == Xlocale name, no expansion of alias */
target_dir = args[0]; snprintf(dir_name, dir_len, "%s/%s", args[0], lc_name);
target_name = lc_name; else
} snprintf(dir_name, dir_len, "%s/%s", target_dir, target_name);
/* snprintf(dir_name, dir_len, "%s/%", target_dir, target_name); */ Xfree(target_name);
strncpy(dir_name, target_dir, dir_len - 1);
if (strlen(target_dir) >= dir_len - 1) {
dir_name[dir_len - 1] = '\0';
} else {
strcat(dir_name, "/");
strncat(dir_name, target_name, dir_len - strlen(dir_name) - 1);
if (strlen(target_name) >= dir_len - strlen(dir_name) - 1)
dir_name[dir_len - 1] = '\0';
}
if (target_name != lc_name)
Xfree(target_name);
if (last_dir_name != 0) if (last_dir_name != 0)
Xfree (last_dir_name); Xfree (last_dir_name);
...@@ -707,14 +694,14 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name) ...@@ -707,14 +694,14 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name)
} }
char * char *
_XlcLocaleLibDirName(char *dir_name, size_t dir_len, char *lc_name) _XlcLocaleLibDirName(char *dir_name, size_t dir_len, const char *lc_name)
{ {
char dir[PATH_MAX], buf[PATH_MAX], *name = NULL; char dir[PATH_MAX], buf[PATH_MAX];
int i, n; int i, n;
char *args[NUM_LOCALEDIR]; char *args[NUM_LOCALEDIR];
static char locale_alias[] = LOCALE_ALIAS; static char locale_alias[] = LOCALE_ALIAS;
char *target_name = (char*)0; char *target_name = NULL;
char *target_dir = (char*)0; char *target_dir = NULL;
char *nlc_name = NULL; char *nlc_name = NULL;
static char* last_dir_name = 0; static char* last_dir_name = 0;
static size_t last_dir_len = 0; static size_t last_dir_len = 0;
...@@ -729,6 +716,8 @@ _XlcLocaleLibDirName(char *dir_name, size_t dir_len, char *lc_name) ...@@ -729,6 +716,8 @@ _XlcLocaleLibDirName(char *dir_name, size_t dir_len, char *lc_name)
xlocalelibdir (dir, PATH_MAX); xlocalelibdir (dir, PATH_MAX);
n = _XlcParsePath(dir, args, 256); n = _XlcParsePath(dir, args, 256);
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
char *name = NULL;
if (args[i] == NULL) if (args[i] == NULL)
continue; continue;
...@@ -743,18 +732,15 @@ _XlcLocaleLibDirName(char *dir_name, size_t dir_len, char *lc_name) ...@@ -743,18 +732,15 @@ _XlcLocaleLibDirName(char *dir_name, size_t dir_len, char *lc_name)
} }
} }
/* If name is not an alias, use lc_name for locale.dir search */
if (name == NULL)
name = lc_name;
/* look at locale.dir */ /* look at locale.dir */
target_dir = args[i]; target_dir = args[i];
if (snprintf(buf, PATH_MAX, "%s/locale.dir", target_dir) < PATH_MAX) { if (snprintf(buf, PATH_MAX, "%s/locale.dir", target_dir) < PATH_MAX) {
target_name = resolve_name(name, buf, RtoL); /* If name is not an alias, use lc_name for locale.dir search */
target_name = resolve_name(name ? name : lc_name, buf, RtoL);
} }
if (name != lc_name) Xfree(name);
Xfree(name); name = NULL;
if (target_name != NULL) { if (target_name != NULL) {
char *p = 0; char *p = 0;
if ((p = strstr(target_name, "/XLC_LOCALE"))) { if ((p = strstr(target_name, "/XLC_LOCALE"))) {
...@@ -764,27 +750,15 @@ _XlcLocaleLibDirName(char *dir_name, size_t dir_len, char *lc_name) ...@@ -764,27 +750,15 @@ _XlcLocaleLibDirName(char *dir_name, size_t dir_len, char *lc_name)
Xfree(target_name); Xfree(target_name);
target_name = NULL; target_name = NULL;
} }
name = NULL;
} }
if (nlc_name) Xfree(nlc_name); if (nlc_name) Xfree(nlc_name);
if (target_name == NULL) { if (target_name == NULL)
/* vendor locale name == Xlocale name, no expansion of alias */ /* vendor locale name == Xlocale name, no expansion of alias */
target_dir = args[0]; snprintf(dir_name, dir_len, "%s/%s", args[0], lc_name);
target_name = lc_name; else
} snprintf(dir_name, dir_len, "%s/%s", target_dir, target_name);
/* snprintf(dir_name, dir_len, "%s/%", target_dir, target_name); */ Xfree(target_name);
strncpy(dir_name, target_dir, dir_len - 1);
if (strlen(target_dir) >= dir_len - 1) {
dir_name[dir_len - 1] = '\0';
} else {
strcat(dir_name, "/");
strncat(dir_name, target_name, dir_len - strlen(dir_name) - 1);
if (strlen(target_name) >= dir_len - strlen(dir_name) - 1)
dir_name[dir_len - 1] = '\0';
}
if (target_name != lc_name)
Xfree(target_name);
if (last_dir_name != 0) if (last_dir_name != 0)
Xfree (last_dir_name); Xfree (last_dir_name);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment