@@ -415,48 +415,49 @@ ConfigFile::LineType ConfigFile::parseLine(const char* fileName, const String& i
415
415
416
416
bool ConfigFile::macroParse (String& value, const char * fileName) const
417
417
{
418
+ String::size_type pos = 0 ;
418
419
String::size_type subFrom;
419
420
420
- while ((subFrom = value.find (" $(" )) != String::npos)
421
+ while ((subFrom = value.find (" $(" , pos )) != String::npos)
421
422
{
422
423
String::size_type subTo = value.find (" )" , subFrom);
423
- if (subTo != String::npos)
424
- {
425
- String macro;
426
- String m = value.substr (subFrom + 2 , subTo - (subFrom + 2 ));
427
-
428
- if (!translate (fileName, m, macro))
429
- {
430
- if (flags & CUSTOM_MACROS)
431
- continue ;
432
-
433
- return false ;
434
- }
424
+ if (subTo == String::npos)
425
+ return false ;
435
426
436
- ++subTo;
427
+ String macro;
428
+ String m = value.substr (subFrom + 2 , subTo - (subFrom + 2 ));
437
429
438
- // Avoid incorrect slashes in pathnames
439
- PathUtils::fixupSeparators (value.begin ());
440
- PathUtils::fixupSeparators (macro.begin ());
430
+ ++subTo;
441
431
442
- if (subFrom > 0 && value[subFrom - 1 ] == PathUtils::dir_sep &&
443
- macro.length () > 0 && macro[0 ] == PathUtils::dir_sep)
444
- {
445
- --subFrom;
446
- }
447
- if (subTo < value.length () && value[subTo] == PathUtils::dir_sep &&
448
- macro.length () > 0 && macro[macro.length () - 1 ] == PathUtils::dir_sep)
432
+ if (!translate (fileName, m, macro))
433
+ {
434
+ if (flags & CUSTOM_MACROS)
449
435
{
450
- ++subTo;
436
+ pos = subTo;
437
+ continue ;
451
438
}
452
439
453
- // Now perform operation
454
- value.replace (subFrom, subTo - subFrom, macro);
440
+ return false ;
455
441
}
456
- else
442
+
443
+ // Avoid incorrect slashes in pathnames
444
+ PathUtils::fixupSeparators (value.begin ());
445
+ PathUtils::fixupSeparators (macro.begin ());
446
+
447
+ if (subFrom > 0 && value[subFrom - 1 ] == PathUtils::dir_sep &&
448
+ macro.length () > 0 && macro[0 ] == PathUtils::dir_sep)
457
449
{
458
- return false ;
450
+ --subFrom ;
459
451
}
452
+ if (subTo < value.length () && value[subTo] == PathUtils::dir_sep &&
453
+ macro.length () > 0 && macro[macro.length () - 1 ] == PathUtils::dir_sep)
454
+ {
455
+ ++subTo;
456
+ }
457
+
458
+ // Now perform operation
459
+ value.replace (subFrom, subTo - subFrom, macro);
460
+ pos = subFrom + macro.length ();
460
461
}
461
462
462
463
return true ;
0 commit comments