[PATCH:libX11 14/22] Constify lc_name argument to _XlcLocaleDirName() & _XlcLocaleLibDirName()

Alan Coopersmith alan.coopersmith at oracle.com
Mon Aug 12 00:04:05 PDT 2013


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: Alan Coopersmith <alan.coopersmith at oracle.com>
---
 src/xlibi18n/XlcDL.c   |    6 ++--
 src/xlibi18n/XlcPubI.h |    4 +--
 src/xlibi18n/lcFile.c  |   86 +++++++++++++++++-------------------------------
 3 files changed, 35 insertions(+), 61 deletions(-)

diff --git a/src/xlibi18n/XlcDL.c b/src/xlibi18n/XlcDL.c
index 2bef4ac..5788005 100644
--- a/src/xlibi18n/XlcDL.c
+++ b/src/xlibi18n/XlcDL.c
@@ -381,9 +381,9 @@ _XlcDynamicLoad(const char *lc_name)
 
     if (lc_name == NULL) return (XLCd)NULL;
 
-    if (_XlcLocaleDirName(lc_dir, BUFSIZE, (char *)lc_name) == (char *)NULL)
+    if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == (char *)NULL)
         return (XLCd)NULL;
-    if (_XlcLocaleLibDirName(lc_lib_dir, BUFSIZE, (char *)lc_name) == (char*)NULL)
+    if (_XlcLocaleLibDirName(lc_lib_dir, BUFSIZE, lc_name) == (char*)NULL)
 	return (XLCd)NULL;
 
     resolve_object(lc_dir, lc_name);
@@ -510,7 +510,7 @@ _XDynamicUnRegisterIMInstantiateCallback(
     XPointer	 client_data)
 {
   char lc_dir[BUFSIZE];
-  char *lc_name;
+  const char *lc_name;
   dynamicUnregisterProcp im_unregisterIM = (dynamicUnregisterProcp)NULL;
   Bool ret_flag = False;
   int count;
diff --git a/src/xlibi18n/XlcPubI.h b/src/xlibi18n/XlcPubI.h
index 22ac2bd..a83d243 100644
--- a/src/xlibi18n/XlcPubI.h
+++ b/src/xlibi18n/XlcPubI.h
@@ -207,13 +207,13 @@ extern int _XlcResolveI18NPath(
 extern char *_XlcLocaleLibDirName(
      char*             /* dir_name */,
      size_t,	       /* dir_len */
-     char*             /* lc_name */
+     const char*       /* lc_name */
 );
 
 extern char *_XlcLocaleDirName(
      char*             /* dir_name */,
      size_t,	       /* dir_len */
-     char*             /* lc_name */
+     const char*       /* lc_name */
 );
 
 extern XPointer _XlcCreateLocaleDataBase(
diff --git a/src/xlibi18n/lcFile.c b/src/xlibi18n/lcFile.c
index 8f0137a..6b0e4c9 100644
--- a/src/xlibi18n/lcFile.c
+++ b/src/xlibi18n/lcFile.c
@@ -615,14 +615,14 @@ _XlcResolveI18NPath(char *buf, int buf_len)
 }
 
 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;
     char *args[NUM_LOCALEDIR];
     static char locale_alias[] = LOCALE_ALIAS;
-    char *target_name = (char*)0;
-    char *target_dir = (char*)0;
+    char *target_name = NULL;
+    char *target_dir = NULL;
     char *nlc_name = NULL;
     static char*  last_dir_name = 0;
     static size_t last_dir_len = 0;
@@ -637,6 +637,8 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name)
     xlocaledir (dir, PATH_MAX);
     n = _XlcParsePath(dir, args, 256);
     for (i = 0; i < n; ++i) {
+	char *name = NULL;
+
 	if (args[i] == NULL)
 	    continue;
 
@@ -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 */
 
  	target_dir = args[i];
 	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) {
  	    char *p = 0;
  	    if ((p = strstr(target_name, "/XLC_LOCALE"))) {
@@ -672,27 +671,15 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name)
  	    Xfree(target_name);
  	    target_name = NULL;
  	}
- 	name = NULL;
     }
     if (nlc_name) Xfree(nlc_name);
 
-    if (target_name == NULL) {
+    if (target_name == NULL)
  	/* vendor locale name == Xlocale name, no expansion of alias */
- 	target_dir = args[0];
- 	target_name = lc_name;
-    }
-    /* snprintf(dir_name, dir_len, "%s/%", target_dir, 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);
+	snprintf(dir_name, dir_len, "%s/%s", args[0], lc_name);
+    else
+	snprintf(dir_name, dir_len, "%s/%s", target_dir, target_name);
+    Xfree(target_name);
 
     if (last_dir_name != 0)
 	Xfree (last_dir_name);
@@ -707,14 +694,14 @@ _XlcLocaleDirName(char *dir_name, size_t dir_len, char *lc_name)
 }
 
 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;
     char *args[NUM_LOCALEDIR];
     static char locale_alias[] = LOCALE_ALIAS;
-    char *target_name = (char*)0;
-    char *target_dir = (char*)0;
+    char *target_name = NULL;
+    char *target_dir = NULL;
     char *nlc_name = NULL;
     static char*  last_dir_name = 0;
     static size_t last_dir_len = 0;
@@ -729,6 +716,8 @@ _XlcLocaleLibDirName(char *dir_name, size_t dir_len, char *lc_name)
     xlocalelibdir (dir, PATH_MAX);
     n = _XlcParsePath(dir, args, 256);
     for (i = 0; i < n; ++i) {
+	char *name = NULL;
+
 	if (args[i] == NULL)
 	    continue;
 
@@ -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 */
 
  	target_dir = args[i];
 	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) {
  	    char *p = 0;
  	    if ((p = strstr(target_name, "/XLC_LOCALE"))) {
@@ -764,27 +750,15 @@ _XlcLocaleLibDirName(char *dir_name, size_t dir_len, char *lc_name)
  	    Xfree(target_name);
  	    target_name = NULL;
  	}
- 	name = NULL;
     }
     if (nlc_name) Xfree(nlc_name);
 
-    if (target_name == NULL) {
+    if (target_name == NULL)
  	/* vendor locale name == Xlocale name, no expansion of alias */
- 	target_dir = args[0];
- 	target_name = lc_name;
-    }
-    /* snprintf(dir_name, dir_len, "%s/%", target_dir, 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);
+	snprintf(dir_name, dir_len, "%s/%s", args[0], lc_name);
+    else
+	snprintf(dir_name, dir_len, "%s/%s", target_dir, target_name);
+    Xfree(target_name);
 
     if (last_dir_name != 0)
 	Xfree (last_dir_name);
-- 
1.7.9.2



More information about the xorg-devel mailing list