From: Giacomo G. <gu...@li...> - 2003-03-19 14:09:27
|
Hi all I found that the cmdline inside the multiboot structure is modified by the argc,argv elaboration /oslib/xlib/x1.c function _startup(void) it cause a fail getting argc argv when the cmdline is reused outside the oslib (ex: s.ha.r.k.) so I suggest this correction (diff) where I defined and use a temp var. Index: x1.c =================================================================== RCS file: /home/cvs/cvsroot/shark/oslib/xlib/x1.c,v retrieving revision 1.2 diff -u -r1.2 x1.c --- x1.c 30 Jan 2003 09:24:16 -0000 1.2 +++ x1.c 19 Mar 2003 13:05:25 -0000 @@ -98,6 +98,7 @@ void _startup(void) { register int i = 0; + char temp[1000]; struct multiboot_info *mbi = mbi_address(); char *cmdline = (char *)(mbi->cmdline); @@ -105,16 +106,21 @@ cputs("X/Runtime library error!!! Unable to find memory information!\n"); l1_exit(-1); } - + if (mbi->flags & MB_INFO_CMDLINE) { /* Build parameter list, up to 100 parms... */ - while (cmdline[i] != 0) { - _argv[_argc] = &(cmdline[i]); - while (cmdline[i] != ' ' && cmdline[i] != 0) i++; + while (cmdline[i] != 0 && i < 1000) { + temp[i] = cmdline[i]; + _argv[_argc] = &(temp[i]); + while (cmdline[i] != ' ' && cmdline[i] != 0 && i < 1000) { + temp[i] = cmdline[i]; + i++; + } if (cmdline[i] == ' ') { - cmdline[i] = 0; i++; _argc++; + temp[i] = 0; i++; _argc++; } } + temp[i] = 0; _argc++; } @@ -122,15 +128,16 @@ /* Call main procedure using standard C convention */ /* Remember you cannot call any console I/O function */ /* if you do not call bios_save() */ - + + #ifdef __DUMP_MEM__ message("X/MEM : %u\n",mbi->mem_upper); message("DOS/MEM : %u\n",mbi->mem_lower); message("x_bios Size : %u\n",sizeof(X_BIOSCALL)); message("mbi Size : %u\n",sizeof(struct multiboot_info)); message("Cmdline : %s\n",mbi->cmdline); - message("Argc : %u",_argc); - message("Argv[0] : %s / %s\n",_argv[0]); + message("Argc : %u\n",_argc); + message("Argv[0] : %s\n",_argv[0]); message("Argv[1] : %s\n",_argv[1]); message("Argv[2] : %s\n",_argv[2]); message("Argv[3] : %s\n",_argv[3]); |