summaryrefslogtreecommitdiff
path: root/Kernel/FileSystem
diff options
context:
space:
mode:
authorSergey Bugaev <bugaevc@gmail.com>2019-06-12 16:25:28 +0300
committerAndreas Kling <awesomekling@gmail.com>2019-06-12 16:14:29 +0200
commit75df45d709445c8a74ea8b7be5c60ef3fe852a90 (patch)
tree0731f1c160ef5952d5d70de9029f6fcb52122764 /Kernel/FileSystem
parentb29a83d554200182bd1bfb41b08e601c7944c4df (diff)
downloadserenity-75df45d709445c8a74ea8b7be5c60ef3fe852a90.zip
Kernel: Fix comparing StringViews with strcmp().
StringView character buffer is not guaranteed to be null-terminated; in particular it will not be null-terminated when making a substring. This means that the buffer can not be used with C functions that expect a null-terminated string. Instead, StringView provides a convinient operator == for comparing it with Strings and C stirngs, so use that. This fixes /proc/self/... resolution failures in ProcFS, since the name ("self") passed to ProcFSInode::lookup() would not be null-terminated.
Diffstat (limited to 'Kernel/FileSystem')
-rw-r--r--Kernel/FileSystem/Ext2FileSystem.cpp4
-rw-r--r--Kernel/FileSystem/ProcFS.cpp6
2 files changed, 5 insertions, 5 deletions
diff --git a/Kernel/FileSystem/Ext2FileSystem.cpp b/Kernel/FileSystem/Ext2FileSystem.cpp
index 0f85b40892..3ad2c9b306 100644
--- a/Kernel/FileSystem/Ext2FileSystem.cpp
+++ b/Kernel/FileSystem/Ext2FileSystem.cpp
@@ -767,7 +767,7 @@ KResult Ext2FSInode::add_child(InodeIdentifier child_id, const StringView& name,
Vector<FS::DirectoryEntry> entries;
bool name_already_exists = false;
traverse_as_directory([&](auto& entry) {
- if (!strcmp(entry.name, name.characters())) {
+ if (name == entry.name) {
name_already_exists = true;
return false;
}
@@ -812,7 +812,7 @@ KResult Ext2FSInode::remove_child(const StringView& name)
Vector<FS::DirectoryEntry> entries;
traverse_as_directory([&](auto& entry) {
- if (strcmp(entry.name, name.characters()) != 0)
+ if (name != entry.name)
entries.append(entry);
return true;
});
diff --git a/Kernel/FileSystem/ProcFS.cpp b/Kernel/FileSystem/ProcFS.cpp
index aef44fcbe5..e197fd1c92 100644
--- a/Kernel/FileSystem/ProcFS.cpp
+++ b/Kernel/FileSystem/ProcFS.cpp
@@ -966,7 +966,7 @@ InodeIdentifier ProcFSInode::lookup(StringView name)
if (entry.name == nullptr)
continue;
if (entry.proc_file_type > __FI_Root_Start && entry.proc_file_type < __FI_Root_End) {
- if (!strcmp(entry.name, name.characters())) {
+ if (name == entry.name) {
return to_identifier(fsid(), PDI_Root, 0, (ProcFileType)entry.proc_file_type);
}
}
@@ -988,7 +988,7 @@ InodeIdentifier ProcFSInode::lookup(StringView name)
if (proc_file_type == FI_Root_sys) {
for (int i = 0; i < fs().m_sys_entries.size(); ++i) {
auto& entry = fs().m_sys_entries[i];
- if (!strcmp(entry.name, name.characters()))
+ if (name == entry.name)
return sys_var_to_identifier(fsid(), i);
}
return {};
@@ -1005,7 +1005,7 @@ InodeIdentifier ProcFSInode::lookup(StringView name)
continue;
if (entry.name == nullptr)
continue;
- if (!strcmp(entry.name, name.characters())) {
+ if (name == entry.name) {
return to_identifier(fsid(), PDI_PID, to_pid(identifier()), (ProcFileType)entry.proc_file_type);
}
}