|
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]);
|