[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [tyndur-devel] [PATCH 7/7] argv über PPB übergeben
On Sat, Jan 08, 2011 at 07:39:51PM +0100, Antoine Kaufmann wrote:
> On Wed, Dec 29 14:12, Kevin Wolf wrote:
> > * libc: Die Argumente von neu gestarteten Programmen werden jetzt in
> > einem PPB statt in der Kommandozeile übergeben
> > * init: Angepasst, um Programme mit PPB starten zu können
> > * Pascal-RTL: argv wird jetzt aus dem PPB ausgelesen
>
> Wäre der letzte Punkt nicht eher was für einen separaten Pätsch?
Wollte ich eigentlich, aber egal wierum ich es ändere, mache ich damit
die Pascal-RTL für einen Commit kaputt, weil ich mir dort nicht die Mühe
mache, veralteten Code mitzuschleppen.
> > @@ -496,14 +501,29 @@ pid_t start_program(char* path, char* args, pid_t parent_pid)
> > return false;
> > }
> >
> > - asprintf(&new_args, "%s%s%s",
> > - interpreter + 2,
> > - args ? " " : "",
> > - args ? args : "");
> > - new_path = strtok(interpreter + 2, " ");
> > + interp_args = interpreter + 2;
> > +
> > + ppb = open_shared_memory(shm);
> > + if (ppb == NULL) {
> > + return false;
> > + }
> > + ppb_size = PAGE_SIZE; // FIXME
>
> Was gehoert denn hier in richtig hin? Ein shm_size-Syscall?
Ja, irgendwie sowas.
> > @@ -223,41 +212,21 @@ begin
> > OpenStdIO(StdErr, fmOutput, StdErrorHandle);
> > end;
> >
> > +function ppb_get_argc(ppb: Pointer; size: integer): integer;
> > + cdecl; external name 'ppb_get_argc';
> > +procedure ppb_copy_argv(ppb: Pointer; size: integer; argv: PPChar; argc: integer);
> > + cdecl; external name 'ppb_copy_argv';
> > +
> > procedure InitParams;
> > var
> > i: integer;
> > p: PChar;
> > space: boolean;
> > begin
> > - commandline := GetCmdline();
> > -
> > - p := commandline;
> > - argc := 0;
> > - space := false;
> > - while p^ <> #0 do begin
> > - if p^ = ' ' then begin
> > - space := true;
> > - end else if space then begin
> > - space := false;
> > - Inc(argc);
> > - end;
> > -
> > - Inc(p);
> > - end;
> > + argc := ppb_get_argc(ppb_ptr, ppb_size);
>
> Hier vielleicht noch etwas Fehlerbehandlung?
Wird überbewertet. ;-) Ich bau's für die nächste Version ein.
>
> >
> > - (*argv := GetMem((argc + 1) * sizeof(PChar));
> > -
> > - p := cmdline;
> > - argv^ := p;
> > - i := 1;
> > - while p^ <> #0 do begin
> > - if p^ = ' ' then begin
> > - (argv + i)^ := p;
> > - Inc(i);
> > - end;
> > -
> > - Inc(p);
> > - end;*)
> > + argv := GetMem((argc + 1) * sizeof(PChar));
> > + ppb_copy_argv(ppb_ptr, ppb_size, argv, argc);
> > end;
> >
> > Begin
>
> Weiter fällt mir auf, dass die crt0 noch den Code für ohne PPB enthält,
> aber prt0 nicht. Hat das irgend einen konkreten Grund? ;-)
Jo, init kriegt vom Kernel keinen PPB, deswegen kann das in der libc
nicht raus. Wobei man es vielleicht von der libc nach init verschieben
könnte, das wäre wahrscheinlich sauberer.
Kevin