Mercurial > octave
comparison liboctave/file-ops.cc @ 5138:5fa9670b5956
[project @ 2005-02-09 23:13:03 by jwe]
author | jwe |
---|---|
date | Wed, 09 Feb 2005 23:13:03 +0000 |
parents | 14dc2267c343 |
children | 8b7b4ffab39c |
comparison
equal
deleted
inserted
replaced
5137:5ee7da8b8a4b | 5138:5fa9670b5956 |
---|---|
307 #else | 307 #else |
308 msg = NOT_SUPPORTED ("rmdir"); | 308 msg = NOT_SUPPORTED ("rmdir"); |
309 #endif | 309 #endif |
310 | 310 |
311 return status; | 311 return status; |
312 } | |
313 | |
314 std::string | |
315 file_ops::canonicalize_file_name (const std::string& name) | |
316 { | |
317 std::string msg; | |
318 return canonicalize_file_name (name, msg); | |
319 } | |
320 | |
321 std::string | |
322 file_ops::canonicalize_file_name (const std::string& name, std::string& msg) | |
323 { | |
324 msg = std::string (); | |
325 | |
326 std::string retval; | |
327 | |
328 #if defined (HAVE_CANONICALIZE_FILE_NAME) | |
329 | |
330 char *tmp = ::canonicalize_file_name (name.c_str ()); | |
331 | |
332 if (tmp) | |
333 { | |
334 retval = tmp; | |
335 ::free (tmp); | |
336 } | |
337 | |
338 #elif defined (HAVE_RESOLVEPATH) | |
339 | |
340 #if !defined (errno) | |
341 extern int errno; | |
342 #endif | |
343 | |
344 #if !defined (__set_errno) | |
345 # define __set_errno(Val) errno = (Val) | |
346 #endif | |
347 | |
348 if (name.empty ()) | |
349 { | |
350 __set_errno (ENOENT); | |
351 return retval; | |
352 } | |
353 | |
354 // All known hosts with resolvepath (e.g. Solaris 7) don't turn | |
355 // relative names into absolute ones, so prepend the working | |
356 // directory if the path is not absolute. | |
357 | |
358 name = octave_env::make_absolute (name); | |
359 | |
360 size_t resolved_size = name.length (); | |
361 | |
362 while (1) | |
363 { | |
364 resolved_size = 2 * resolved_size + 1; | |
365 | |
366 OCTAVE_LOCAL_BUFFER (char, resolved, resolved_size); | |
367 | |
368 resolved_len = ::resolvepath (name, resolved, resolved_size); | |
369 | |
370 if (resolved_len < 0) | |
371 break; | |
372 | |
373 if (resolved_len < resolved_size) | |
374 { | |
375 retval = resolved; | |
376 break; | |
377 } | |
378 } | |
379 | |
380 #else | |
381 | |
382 // XXX FIXME XXX -- provide replacement here... | |
383 retval = name; | |
384 | |
385 #endif | |
386 | |
387 if (retval.empty ()) | |
388 { | |
389 using namespace std; | |
390 msg = ::strerror (errno); | |
391 } | |
392 | |
393 return retval; | |
312 } | 394 } |
313 | 395 |
314 // We provide a replacement for tempnam(). | 396 // We provide a replacement for tempnam(). |
315 | 397 |
316 std::string | 398 std::string |