fs/StandardDirectory: pass writable string to ParseConfigLine()
Eliminate the std::string overhead.
This commit is contained in:
parent
8921b4f9d1
commit
17b316b94b
@ -125,8 +125,8 @@ static AllocatedPath GetStandardDir(int folder_id)
|
|||||||
|
|
||||||
static const char home_prefix[] = "$HOME/";
|
static const char home_prefix[] = "$HOME/";
|
||||||
|
|
||||||
static bool ParseConfigLine(const char *line, const char *dir_name,
|
static bool
|
||||||
AllocatedPath &result_dir)
|
ParseConfigLine(char *line, const char *dir_name, AllocatedPath &result_dir)
|
||||||
{
|
{
|
||||||
// strip leading white space
|
// strip leading white space
|
||||||
line = strchug_fast(line);
|
line = strchug_fast(line);
|
||||||
@ -162,7 +162,7 @@ static bool ParseConfigLine(const char *line, const char *dir_name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *line_end;
|
char *line_end;
|
||||||
// find end of the string
|
// find end of the string
|
||||||
if (quoted) {
|
if (quoted) {
|
||||||
line_end = strrchr(line, '"');
|
line_end = strrchr(line, '"');
|
||||||
@ -178,17 +178,19 @@ static bool ParseConfigLine(const char *line, const char *dir_name,
|
|||||||
if (line == line_end)
|
if (line == line_end)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
*line_end = 0;
|
||||||
|
|
||||||
// build the result path
|
// build the result path
|
||||||
std::string path(line, line_end);
|
const char *path = line;
|
||||||
|
|
||||||
auto result = AllocatedPath::Null();
|
auto result = AllocatedPath::Null();
|
||||||
if (home_relative) {
|
if (home_relative) {
|
||||||
auto home = GetHomeDir();
|
auto home = GetHomeDir();
|
||||||
if (home.IsNull())
|
if (home.IsNull())
|
||||||
return true;
|
return true;
|
||||||
result = AllocatedPath::Build(home, path.c_str());
|
result = AllocatedPath::Build(home, path);
|
||||||
} else {
|
} else {
|
||||||
result = AllocatedPath::FromFS(std::move(path));
|
result = AllocatedPath::FromFS(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsValidDir(result.c_str())) {
|
if (IsValidDir(result.c_str())) {
|
||||||
@ -208,7 +210,7 @@ static AllocatedPath GetUserDir(const char *name)
|
|||||||
TextFile input(dirs_file);
|
TextFile input(dirs_file);
|
||||||
if (input.HasFailed())
|
if (input.HasFailed())
|
||||||
return result;
|
return result;
|
||||||
const char *line;
|
char *line;
|
||||||
while ((line = input.ReadLine()) != nullptr)
|
while ((line = input.ReadLine()) != nullptr)
|
||||||
if (ParseConfigLine(line, name, result))
|
if (ParseConfigLine(line, name, result))
|
||||||
return result;
|
return result;
|
||||||
|
Loading…
Reference in New Issue
Block a user