comparison libinterp/corefcn/load-path.cc @ 20616:fd0efcdb3718

use new string_value method to handle value extraction errors * dirfns.cc, file-io.cc, gammainc.cc, help.cc, load-path.cc, octave-link.cc, qz.cc, regexp.cc, strfns.cc, syscalls.cc, time.cc, variables.cc: Use new string_value method.
author John W. Eaton <jwe@octave.org>
date Thu, 08 Oct 2015 19:00:51 -0400
parents f90c8372b7ba
children
comparison
equal deleted inserted replaced
20615:729a85dafba8 20616:fd0efcdb3718
2237 2237
2238 octave_idx_type nargin = args.length (); 2238 octave_idx_type nargin = args.length ();
2239 2239
2240 if (nargin == 1) 2240 if (nargin == 1)
2241 { 2241 {
2242 std::string dirname = args(0).string_value (); 2242 std::string dirname = args(0).string_value ("genpath: DIR must be a string");
2243 2243
2244 if (! error_state) 2244 retval = genpath (dirname);
2245 retval = genpath (dirname);
2246 else
2247 error ("genpath: DIR must be a string");
2248 } 2245 }
2249 else if (nargin > 1) 2246 else if (nargin > 1)
2250 { 2247 {
2251 std::string dirname = args(0).string_value (); 2248 std::string dirname = args(0).string_value ("genpath: all arguments must be strings");
2252 2249
2253 string_vector skip (nargin - 1); 2250 string_vector skip (nargin - 1);
2254 2251
2255 for (octave_idx_type i = 1; i < nargin; i++) 2252 for (octave_idx_type i = 1; i < nargin; i++)
2256 skip[i-1] = args(i).string_value (); 2253 skip[i-1] = args(i).string_value ("genpath: all arguments must be strings");
2257 2254
2258 if (! error_state) 2255 retval = genpath (dirname, skip);
2259 retval = genpath (dirname, skip);
2260 else
2261 error ("genpath: all arguments must be strings");
2262 } 2256 }
2263 else 2257 else
2264 print_usage (); 2258 print_usage ();
2265 2259
2266 return retval; 2260 return retval;
2459 2453
2460 bool need_to_update = false; 2454 bool need_to_update = false;
2461 2455
2462 for (int i = 0; i < nargin; i++) 2456 for (int i = 0; i < nargin; i++)
2463 { 2457 {
2464 if (args(i).is_string ()) 2458 std::string arg = args(i).string_value ("addpath: all arguments must be strings");
2465 { 2459
2466 std::string arg = args(i).string_value (); 2460 std::list<std::string> dir_elts = split_path (arg);
2467 2461
2468 std::list<std::string> dir_elts = split_path (arg); 2462 if (! append)
2469 2463 std::reverse (dir_elts.begin (), dir_elts.end ());
2470 if (! append) 2464
2471 std::reverse (dir_elts.begin (), dir_elts.end ()); 2465 for (std::list<std::string>::const_iterator p = dir_elts.begin ();
2472 2466 p != dir_elts.end ();
2473 for (std::list<std::string>::const_iterator p = dir_elts.begin (); 2467 p++)
2474 p != dir_elts.end (); 2468 {
2475 p++) 2469 std::string dir = *p;
2476 { 2470
2477 std::string dir = *p; 2471 //dir = regexprep (dir_elts{j}, '//+', "/");
2478 2472 //dir = regexprep (dir, '/$', "");
2479 //dir = regexprep (dir_elts{j}, '//+', "/"); 2473
2480 //dir = regexprep (dir, '/$', ""); 2474 if (append)
2481 2475 load_path::append (dir, true);
2482 if (append) 2476 else
2483 load_path::append (dir, true); 2477 load_path::prepend (dir, true);
2484 else 2478
2485 load_path::prepend (dir, true); 2479 need_to_update = true;
2486 2480 }
2487 need_to_update = true;
2488 }
2489 }
2490 else
2491 error ("addpath: all arguments must be strings");
2492 } 2481 }
2493 2482
2494 if (need_to_update) 2483 if (need_to_update)
2495 rehash_internal (); 2484 rehash_internal ();
2496 } 2485 }
2528 { 2517 {
2529 bool need_to_update = false; 2518 bool need_to_update = false;
2530 2519
2531 for (int i = 0; i < nargin; i++) 2520 for (int i = 0; i < nargin; i++)
2532 { 2521 {
2533 if (args(i).is_string ()) 2522 std::string arg = args(i).string_value ("rmpath: all arguments must be strings");
2534 { 2523 std::list<std::string> dir_elts = split_path (arg);
2535 std::string arg = args(i).string_value (); 2524
2536 std::list<std::string> dir_elts = split_path (arg); 2525 for (std::list<std::string>::const_iterator p = dir_elts.begin ();
2537 2526 p != dir_elts.end ();
2538 for (std::list<std::string>::const_iterator p = dir_elts.begin (); 2527 p++)
2539 p != dir_elts.end (); 2528 {
2540 p++) 2529 std::string dir = *p;
2541 { 2530
2542 std::string dir = *p; 2531 //dir = regexprep (dir_elts{j}, '//+', "/");
2543 2532 //dir = regexprep (dir, '/$', "");
2544 //dir = regexprep (dir_elts{j}, '//+', "/"); 2533
2545 //dir = regexprep (dir, '/$', ""); 2534 if (! load_path::remove (dir))
2546 2535 warning ("rmpath: %s: not found", dir.c_str ());
2547 if (! load_path::remove (dir)) 2536 else
2548 warning ("rmpath: %s: not found", dir.c_str ()); 2537 need_to_update = true;
2549 else 2538 }
2550 need_to_update = true;
2551 }
2552 }
2553 else
2554 error ("addpath: all arguments must be strings");
2555 } 2539 }
2556 2540
2557 if (need_to_update) 2541 if (need_to_update)
2558 rehash_internal (); 2542 rehash_internal ();
2559 } 2543 }