Commit 8963cd1f authored by Max Kellermann's avatar Max Kellermann

DirectorySave: move code to ParseLine()

parent 55cd5a9a
...@@ -70,6 +70,18 @@ directory_save(FILE *fp, const Directory &directory) ...@@ -70,6 +70,18 @@ directory_save(FILE *fp, const Directory &directory)
fprintf(fp, DIRECTORY_END "%s\n", directory.GetPath()); fprintf(fp, DIRECTORY_END "%s\n", directory.GetPath());
} }
static bool
ParseLine(Directory &directory, const char *line)
{
if (StringStartsWith(line, DIRECTORY_MTIME)) {
directory.mtime =
ParseUint64(line + sizeof(DIRECTORY_MTIME) - 1);
} else
return false;
return true;
}
static Directory * static Directory *
directory_load_subdir(TextFile &file, Directory &parent, const char *name, directory_load_subdir(TextFile &file, Directory &parent, const char *name,
Error &error) Error &error)
...@@ -84,29 +96,23 @@ directory_load_subdir(TextFile &file, Directory &parent, const char *name, ...@@ -84,29 +96,23 @@ directory_load_subdir(TextFile &file, Directory &parent, const char *name,
Directory *directory = parent.CreateChild(name); Directory *directory = parent.CreateChild(name);
const char *line = file.ReadLine(); while (true) {
if (line == nullptr) { const char *line = file.ReadLine();
error.Set(directory_domain, "Unexpected end of file");
directory->Delete();
return nullptr;
}
if (StringStartsWith(line, DIRECTORY_MTIME)) {
directory->mtime =
ParseUint64(line + sizeof(DIRECTORY_MTIME) - 1);
line = file.ReadLine();
if (line == nullptr) { if (line == nullptr) {
error.Set(directory_domain, "Unexpected end of file"); error.Set(directory_domain, "Unexpected end of file");
directory->Delete(); directory->Delete();
return nullptr; return nullptr;
} }
}
if (!StringStartsWith(line, DIRECTORY_BEGIN)) { if (StringStartsWith(line, DIRECTORY_BEGIN))
error.Format(directory_domain, "Malformed line: %s", line); break;
directory->Delete();
return nullptr; if (!ParseLine(*directory, line)) {
error.Format(directory_domain,
"Malformed line: %s", line);
directory->Delete();
return nullptr;
}
} }
success = directory_load(file, *directory, error); success = directory_load(file, *directory, error);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment