File tree Expand file tree Collapse file tree 1 file changed +33
-3
lines changed Expand file tree Collapse file tree 1 file changed +33
-3
lines changed Original file line number Diff line number Diff line change 39
39
FAR char * realpath (FAR const char * path , FAR char * resolved )
40
40
{
41
41
#ifdef CONFIG_PSEUDOFS_SOFTLINKS
42
- char wbuf [2 ][PATH_MAX ];
42
+ FAR char * wbuf [2 ] =
43
+ {
44
+ };
45
+
43
46
int nlnk = 0 ;
44
47
int idx = 0 ;
45
48
ssize_t n ;
@@ -117,6 +120,14 @@ FAR char *realpath(FAR const char *path, FAR char *resolved)
117
120
}
118
121
119
122
* p = '\0' ;
123
+
124
+ #ifdef CONFIG_PSEUDOFS_SOFTLINKS
125
+ if (wbuf [0 ] != NULL )
126
+ {
127
+ lib_free (wbuf [0 ]);
128
+ }
129
+ #endif
130
+
120
131
return resolved ;
121
132
}
122
133
@@ -186,7 +197,19 @@ FAR char *realpath(FAR const char *path, FAR char *resolved)
186
197
goto out ;
187
198
}
188
199
189
- n = readlink (resolved , wbuf [idx ], sizeof (wbuf [0 ]) - 1 );
200
+ if (wbuf [0 ] == NULL )
201
+ {
202
+ wbuf [0 ] = lib_calloc (2 , PATH_MAX );
203
+ if (wbuf [0 ] == NULL )
204
+ {
205
+ set_errno (ENOMEM );
206
+ goto out ;
207
+ }
208
+
209
+ wbuf [1 ] = wbuf [0 ] + PATH_MAX ;
210
+ }
211
+
212
+ n = readlink (resolved , wbuf [idx ], PATH_MAX - 1 );
190
213
if (n <= 0 )
191
214
{
192
215
if (n == 0 )
@@ -199,7 +222,7 @@ FAR char *realpath(FAR const char *path, FAR char *resolved)
199
222
200
223
/* Append unresolved path to link target and switch to it. */
201
224
202
- if (n + (len = strlen (q )) + 1 > sizeof ( wbuf [ 0 ]) )
225
+ if (n + (len = strlen (q )) + 1 > PATH_MAX )
203
226
{
204
227
set_errno (ENAMETOOLONG );
205
228
goto out ;
@@ -234,5 +257,12 @@ FAR char *realpath(FAR const char *path, FAR char *resolved)
234
257
235
258
out :
236
259
lib_free (fres );
260
+ #ifdef CONFIG_PSEUDOFS_SOFTLINKS
261
+ if (wbuf [0 ] != NULL )
262
+ {
263
+ lib_free (wbuf [0 ]);
264
+ }
265
+ #endif
266
+
237
267
return NULL ;
238
268
}
You can’t perform that action at this time.
0 commit comments