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

Re: [Lost] [Patch] getterm



Antoine Kaufmann schrieb:
Index: src/modules/c/getterm/Makefile.all
===================================================================
--- src/modules/c/getterm/Makefile.all	(Revision 0)
+++ src/modules/c/getterm/Makefile.all	(Revision 0)
@@ -0,0 +1,8 @@
+shopt -s extglob
+source $LOST_BUILDMK_ROOT/config.sh
+
+echo "LD   $1/apps/getterm"
+
+$LOST_TOOLS_LD -ogetterm -Ttext=0x40000000 --start-group *.o $2 --end-group
+
+mv getterm $1/apps/

Ersetz das bitte durch die mittlerweile übliche strip-Zeile.

Index: src/modules/c/getterm/main.c
===================================================================
--- src/modules/c/getterm/main.c	(Revision 0)
+++ src/modules/c/getterm/main.c	(Revision 0)
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2007 The LOST Project. All rights reserved.

Ja, ich weiß, das Jahr ist noch jung... ;-)

+// Aufruf an Console zum aendern der Terminal-Optionen
+typedef enum {STDIN, STDOUT, STDERR} console_handle_t;
+typedef struct {
+    pid_t pid;
+    console_handle_t type;
+    char path[];
+} __attribute__((packed)) console_ctrl_t;
+
+/**
+ * Pfad fuer Terminal aendern
+ */
+static void console_set_handle(console_handle_t handle, const char* path)
+{
+    size_t path_len = strlen(path);
+    size_t size = sizeof(console_ctrl_t) + path_len + 1;
+ + // Buffer vorbereiten
+    uint8_t buffer[size];
+    console_ctrl_t* ctrl = (console_ctrl_t*) buffer;
+
+    // Befehlsstruktur auffuellen
+    ctrl->pid = -1;
+    ctrl->type = handle;
+    memcpy(ctrl->path, path, path_len + 1);
+ + // RPC durchfuehren
+    pid_t console_pid = init_service_get("console");
+    dword result = rpc_get_dword(console_pid, "CONS_SET",
+        size, (char*) buffer);
+    if (result == 0) {
+        printf("Fehler beim setzen des Pfades fuer die I/O-Handles.");
+        exit(-1);
+    }
+}
+
+/**
+ * Hauptfunktion
+ */
+int main(int argc, char* argv[])
+{
+    // Wenn die Anzahl der Argumente nicht stimmt wird abgebrochen
+    if (argc != 5) {
+        puts("Aufruf: getterm <stdin> <stdout> <stderr> <Programm>");
+        return -1;
+    }
+
+    // Ein bisschen warten, bis vterm und co bereit sind;
+    msleep(2000);

Ähem. Wir haben schon genug von diesem Mist im SVN...

+    // Lokale Ein- und Ausgabehandles auch anpassen
+    stdio_init();

stdio_init() ist nicht dafür vorgesehen, mehrmals aufgerufen zu werden. Konkret: Mindestens Leaks, weil stdin/out/err nicht geschlossen werden.

+
+    while (TRUE) {
+        char input = 0;
+        printf("\n\nEingabetaste druecken um eine Shell zu starten...\n");

Vielleicht besser "um %s zu starten" mit dem Pfad des Programms?

+        // Auf Druecken der Eingabetaste warten
+        while((fread(&input, 1, 1, stdin) != 1) || (input != '\n')) {
+            msleep(100);

yield();