2 ===================================================================
3 RCS file: /home/x-cvs/xc/lib/X11/XlcDL.c,v
4 retrieving revision 1.9
6 --- XlcDL.c 2002/11/25 14:04:53 1.9
7 +++ xc/lib/X11/XlcDL.c 2003/03/09 18:19:23
10 if (lc_name == NULL) return (XLCd)NULL;
12 - if (_XlcLocaleDirName(lc_dir, (char *)lc_name) == (char*)NULL)
13 + if (_XlcLocaleDirName(lc_dir, BUFSIZE, (char *)lc_name) == (char*)NULL)
16 resolve_object(lc_dir, lc_name);
19 lc_name = lcd->core->name;
21 - if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return (XIM)0;
22 + if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XIM)0;
25 for (; count-- > 0; objects_list++) {
28 lc_name = lcd->core->name;
30 - if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return False;
31 + if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return False;
34 for (; count-- > 0; objects_list++) {
38 lc_name = lcd->core->name;
39 - if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return False;
40 + if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return False;
43 for (; count-- > 0; objects_list++) {
46 lc_name = lcd->core->name;
48 - if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return (XOM)0;
49 + if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XOM)0;
52 for (; count-- > 0; objects_list++) {
54 ===================================================================
55 RCS file: /home/x-cvs/xc/lib/X11/XlcPubI.h,v
56 retrieving revision 3.9
57 diff -u -r3.9 XlcPubI.h
58 --- XlcPubI.h 2001/11/16 00:52:27 3.9
59 +++ xc/lib/X11/XlcPubI.h 2003/03/09 18:19:23
61 extern char *_XlcLocaleDirName(
62 #if NeedFunctionPrototypes
64 + size_t, /* dir_len */
68 --- xc/lib/X11/lcFile.c.orig 2003-03-26 17:52:08.000000000 +0100
69 +++ xc/lib/X11/lcFile.c 2003-03-26 23:30:55.000000000 +0100
74 -_XlcLocaleDirName(dir_name, lc_name)
75 +_XlcLocaleDirName(dir_name, dir_len, lc_name)
80 char dir[PATH_MAX], buf[PATH_MAX], *name = NULL;
83 target_name = lc_name;
85 - strcpy(dir_name, target_dir);
86 - strcat(dir_name, "/");
87 - strcat(dir_name, target_name);
88 + /* snprintf(dir_name, dir_len, "%s/%", target_dir, target_name); */
89 + strncpy(dir_name, target_dir, dir_len - 1);
90 + if (strlen(target_dir) >= dir_len - 1) {
91 + dir_name[dir_len - 1] = '\0';
93 + strcat(dir_name, "/");
94 + strncat(dir_name, target_name, dir_len - strlen(dir_name) - 1);
95 + if (strlen(target_name) >= dir_len - strlen(dir_name) - 1)
96 + dir_name[dir_len - 1] = '\0';