]>
Commit | Line | Data |
---|---|---|
5e0ba830 JB |
1 | Index: XlcDL.c |
2 | =================================================================== | |
3 | RCS file: /home/x-cvs/xc/lib/X11/XlcDL.c,v | |
4 | retrieving revision 1.9 | |
5 | diff -u -r1.9 XlcDL.c | |
6 | --- XlcDL.c 2002/11/25 14:04:53 1.9 | |
7 | +++ xc/lib/X11/XlcDL.c 2003/03/09 18:19:23 | |
8 | @@ -406,7 +406,7 @@ | |
9 | ||
10 | if (lc_name == NULL) return (XLCd)NULL; | |
11 | ||
12 | - if (_XlcLocaleDirName(lc_dir, (char *)lc_name) == (char*)NULL) | |
13 | + if (_XlcLocaleDirName(lc_dir, BUFSIZE, (char *)lc_name) == (char*)NULL) | |
14 | return (XLCd)NULL; | |
15 | ||
16 | resolve_object(lc_dir, lc_name); | |
17 | @@ -452,7 +452,7 @@ | |
18 | ||
19 | lc_name = lcd->core->name; | |
20 | ||
21 | - if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return (XIM)0; | |
22 | + if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XIM)0; | |
23 | ||
24 | count = lc_count; | |
25 | for (; count-- > 0; objects_list++) { | |
26 | @@ -498,7 +498,7 @@ | |
27 | ||
28 | lc_name = lcd->core->name; | |
29 | ||
30 | - if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return False; | |
31 | + if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return False; | |
32 | ||
33 | count = lc_count; | |
34 | for (; count-- > 0; objects_list++) { | |
35 | @@ -543,7 +543,7 @@ | |
36 | #endif | |
37 | ||
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; | |
41 | ||
42 | count = lc_count; | |
43 | for (; count-- > 0; objects_list++) { | |
44 | @@ -610,7 +610,7 @@ | |
45 | ||
46 | lc_name = lcd->core->name; | |
47 | ||
48 | - if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return (XOM)0; | |
49 | + if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XOM)0; | |
50 | ||
51 | count = lc_count; | |
52 | for (; count-- > 0; objects_list++) { | |
53 | Index: XlcPubI.h | |
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 | |
60 | @@ -217,6 +217,7 @@ | |
61 | extern char *_XlcLocaleDirName( | |
62 | #if NeedFunctionPrototypes | |
63 | char* /* dir_name */, | |
64 | + size_t, /* dir_len */ | |
65 | char* /* lc_name */ | |
66 | #endif | |
67 | ); | |
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 | |
70 | @@ -429,8 +429,9 @@ | |
71 | } | |
72 | ||
73 | char * | |
74 | -_XlcLocaleDirName(dir_name, lc_name) | |
75 | +_XlcLocaleDirName(dir_name, dir_len, lc_name) | |
76 | char *dir_name; | |
77 | + size_t dir_len; | |
78 | char *lc_name; | |
79 | { | |
80 | char dir[PATH_MAX], buf[PATH_MAX], *name = NULL; | |
81 | @@ -478,8 +479,15 @@ | |
82 | target_dir = args[0]; | |
83 | target_name = lc_name; | |
84 | } | |
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'; | |
92 | + } else { | |
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'; | |
97 | + } | |
98 | return dir_name; | |
99 | } |