mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:38:11 +00:00
Kernel: Make SysFS and ProcFS generator functions return KResult
This allows us to propagate a whole bunch of KBufferBuilder errors.
This commit is contained in:
parent
2065ced8f6
commit
9db8a14264
5 changed files with 55 additions and 63 deletions
|
@ -40,7 +40,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSAdapters();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
NetworkingManagement::the().for_each([&array](auto& adapter) {
|
||||
|
@ -64,7 +64,7 @@ private:
|
|||
obj.add("mtu", adapter.mtu());
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -74,7 +74,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSARP();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
arp_table().for_each_shared([&](const auto& it) {
|
||||
|
@ -83,7 +83,7 @@ private:
|
|||
obj.add("ip_address", it.key.to_string());
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -93,7 +93,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSTCP();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
TCPSocket::for_each([&array](auto& socket) {
|
||||
|
@ -116,7 +116,7 @@ private:
|
|||
}
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -126,7 +126,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSLocalNet();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
LocalSocket::for_each([&array](auto& socket) {
|
||||
|
@ -140,7 +140,7 @@ private:
|
|||
obj.add("acceptor_gid", socket.acceptor_gid().value());
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -150,7 +150,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSUDP();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
UDPSocket::for_each([&array](auto& socket) {
|
||||
|
@ -166,7 +166,7 @@ private:
|
|||
}
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -348,7 +348,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSDiskUsage();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
VirtualFileSystem::the().for_each_mount([&array](auto& mount) {
|
||||
|
@ -370,7 +370,7 @@ private:
|
|||
fs_object.add("source", "none");
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -380,7 +380,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSMemoryStatus();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
InterruptDisabler disabler;
|
||||
|
||||
|
@ -407,7 +407,7 @@ private:
|
|||
json.add(String::formatted("{}_num_free", prefix), num_free);
|
||||
});
|
||||
json.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -417,7 +417,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSOverallProcesses();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonObjectSerializer<KBufferBuilder> json { builder };
|
||||
|
||||
|
@ -515,7 +515,7 @@ private:
|
|||
json.add("total_time", total_time_scheduled.total);
|
||||
json.add("total_time_kernel", total_time_scheduled.total_kernel);
|
||||
}
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
class ProcFSCPUInformation final : public ProcFSGlobalInformation {
|
||||
|
@ -524,7 +524,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSCPUInformation();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
Processor::for_each(
|
||||
|
@ -546,7 +546,7 @@ private:
|
|||
obj.add("brandstr", info.brandstr());
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
class ProcFSDmesg final : public ProcFSGlobalInformation {
|
||||
|
@ -557,14 +557,13 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSDmesg();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
InterruptDisabler disabler;
|
||||
for (char ch : ConsoleDevice::the().logbuffer()) {
|
||||
if (builder.append(ch).is_error())
|
||||
return false;
|
||||
TRY(builder.append(ch));
|
||||
}
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
class ProcFSInterrupts final : public ProcFSGlobalInformation {
|
||||
|
@ -573,7 +572,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSInterrupts();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
InterruptManagement::the().enumerate_interrupt_handlers([&array](GenericInterruptHandler& handler) {
|
||||
|
@ -586,7 +585,7 @@ private:
|
|||
obj.add("call_count", (unsigned)handler.get_invoking_count());
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
class ProcFSKeymap final : public ProcFSGlobalInformation {
|
||||
|
@ -595,12 +594,12 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSKeymap();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonObjectSerializer<KBufferBuilder> json { builder };
|
||||
json.add("keymap", HIDManagement::the().keymap_name());
|
||||
json.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -611,7 +610,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSPCI();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
PCI::enumerate([&array](PCI::Address address, PCI::ID id) {
|
||||
|
@ -629,7 +628,7 @@ private:
|
|||
obj.add("subsystem_vendor_id", PCI::get_subsystem_vendor_id(address));
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -639,7 +638,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSDevices();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
JsonArraySerializer array { builder };
|
||||
Device::for_each([&array](auto& device) {
|
||||
|
@ -656,7 +655,7 @@ private:
|
|||
VERIFY_NOT_REACHED();
|
||||
});
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
class ProcFSUptime final : public ProcFSGlobalInformation {
|
||||
|
@ -665,11 +664,9 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSUptime();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
if (builder.appendff("{}\n", TimeManagement::the().uptime_ms() / 1000).is_error())
|
||||
return false;
|
||||
return true;
|
||||
return builder.appendff("{}\n", TimeManagement::the().uptime_ms() / 1000);
|
||||
}
|
||||
};
|
||||
class ProcFSCommandLine final : public ProcFSGlobalInformation {
|
||||
|
@ -678,13 +675,11 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSCommandLine();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
if (builder.append(kernel_command_line().string()).is_error())
|
||||
return false;
|
||||
if (builder.append('\n').is_error())
|
||||
return false;
|
||||
return true;
|
||||
TRY(builder.append(kernel_command_line().string()));
|
||||
TRY(builder.append('\n'));
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
class ProcFSModules final : public ProcFSGlobalInformation {
|
||||
|
@ -695,7 +690,7 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSModules();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
extern HashMap<String, OwnPtr<Module>>* g_modules;
|
||||
JsonArraySerializer array { builder };
|
||||
|
@ -711,7 +706,7 @@ private:
|
|||
obj.add("size", size);
|
||||
}
|
||||
array.finish();
|
||||
return true;
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
class ProcFSProfile final : public ProcFSGlobalInformation {
|
||||
|
@ -722,13 +717,16 @@ public:
|
|||
|
||||
private:
|
||||
ProcFSProfile();
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
extern PerformanceEventBuffer* g_global_perf_events;
|
||||
if (!g_global_perf_events)
|
||||
return false;
|
||||
return ENOENT;
|
||||
|
||||
return g_global_perf_events->to_json(builder);
|
||||
// FIXME: to_json() should return a better error.
|
||||
if (!g_global_perf_events->to_json(builder))
|
||||
return ENOMEM;
|
||||
|
||||
return KSuccess;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -741,13 +739,11 @@ private:
|
|||
|
||||
virtual mode_t required_mode() const override { return 0400; }
|
||||
|
||||
virtual bool output(KBufferBuilder& builder) override
|
||||
virtual KResult try_generate(KBufferBuilder& builder) override
|
||||
{
|
||||
if (!Process::current().is_superuser())
|
||||
return false;
|
||||
if (builder.append(String::number(kernel_load_base)).is_error())
|
||||
return false;
|
||||
return true;
|
||||
return EPERM;
|
||||
return builder.append(String::number(kernel_load_base));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue