[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [Patch] Hardlinks für LostIO



Toni Kaufmann schrieb:
Index: console/console.c
Index: fat/main.c
Index: floppy/floppy.c
Index: gui/src/main.c
Index: kbc/keyboard.c
Index: kbc/mouse.c
Index: keyboard/keyboard.c

Wird Zeit, daß wir das mal endgültig rauswerfen...

Index: tcpip/lostio_if.c
Index: textterm/main.c
Index: vesa/main.c
Index: vga/main.c
Index: videodriver/main.c
Index: vterm/lostio.c
Index: lib/lostio/types/ramfile.c
Index: lib/lostio/types/directory.c
Index: lib/lostio/lostio.c

cmos und ide fehlen, wie ich das sehen.

+        // RPC durchfuehren und auf Ergebnis warten
+        result = rpc_get_int(target_file->pid, "IO_LINK ", size, buffer);
+        switch (result) {
+            // Ziel oder Verzeichnis nicht in Ordnung
+            case -1:
+                errno = ENOENT;

result = -1;

Zwar theoretisch unnötig, aber sowas schreibt man nochmal explizit hin. Denn die zurückgegebene -1 und die neue -1 sind semantisch nicht dasselbe. Und irgendwann kommt garantiert einer, ändert den RPC-Rückgabewert und wundert sich.

+
+    // Sollte nicht passieren
+    return result;

Wieso sollte das nicht passieren? ;-)

+        // RPC durchfuehren und auf Ergebnis warten
+        result = rpc_get_int(link_dir->pid, "IO_ULINK", size, buffer);
+        switch (result) {
+            // Ziel oder Verzeichnis nicht in Ordnung
+            case -1:
+                errno = ENOENT;

Siehe oben

+/**
+ * Ein Prozess hat ein io_link auf einem File-Handle dieses Treibers ausgefuehrt
+ */

Rückgabewerte erklären

+void rpc_io_link(pid_t pid, dword correlation_id, size_t data_size, void* data)
+{
+    io_link_request_t* link_request = (io_link_request_t*) data;
+ + // Pruefen, ob das Format stimmt, also ob soviele Daten da sind, wie wir
+    // erwarten
+    if (((link_request->name_len + sizeof(io_link_request_t)) > data_size) ||
+        (strnlen(link_request->name, link_request->name_len + 1) !=
+        link_request->name_len))
+    {
+        rpc_send_int_response(pid, correlation_id, -3);
+        return;
+    }

Guter Ansatz, die Prüfung vorher, ob sizeof(io_link_request_t) > data_size fehlt aber noch. Sonst bekommst du deinen PF halt in diesem Check.

 /**
+ * Ein Prozess hat ein io_remove auf einem File-Handle dieses Treibers ausgefuehrt
+ */

Rückgabewerte