From 17b316b94bcc65ddf60fde645457f3d54e74e446 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Thu, 7 Aug 2014 15:21:19 +0200
Subject: [PATCH] fs/StandardDirectory: pass writable string to
 ParseConfigLine()

Eliminate the std::string overhead.
---
 src/fs/StandardDirectory.cxx | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/fs/StandardDirectory.cxx b/src/fs/StandardDirectory.cxx
index c8cc7263e..c266480f7 100644
--- a/src/fs/StandardDirectory.cxx
+++ b/src/fs/StandardDirectory.cxx
@@ -125,8 +125,8 @@ static AllocatedPath GetStandardDir(int folder_id)
 
 static const char home_prefix[] = "$HOME/";
 
-static bool ParseConfigLine(const char *line, const char *dir_name,
-			    AllocatedPath &result_dir)
+static bool
+ParseConfigLine(char *line, const char *dir_name, AllocatedPath &result_dir)
 {
 	// strip leading white space
 	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
 	if (quoted) {
 		line_end = strrchr(line, '"');
@@ -178,17 +178,19 @@ static bool ParseConfigLine(const char *line, const char *dir_name,
 	if (line == line_end)
 		return true;
 
-	// build the result path	
-	std::string path(line, line_end);
+	*line_end = 0;
+
+	// build the result path
+	const char *path = line;
 
 	auto result = AllocatedPath::Null();
 	if (home_relative) {
 		auto home = GetHomeDir();
 		if (home.IsNull())
 			return true;
-		result = AllocatedPath::Build(home, path.c_str());
+		result = AllocatedPath::Build(home, path);
 	} else {
-		result = AllocatedPath::FromFS(std::move(path));
+		result = AllocatedPath::FromFS(path);
 	}
 
 	if (IsValidDir(result.c_str())) {
@@ -208,7 +210,7 @@ static AllocatedPath GetUserDir(const char *name)
 	TextFile input(dirs_file);
 	if (input.HasFailed())
 		return result;
-	const char *line;
+	char *line;
 	while ((line = input.ReadLine()) != nullptr)
 		if (ParseConfigLine(line, name, result))
 			return result;