that on 8bit boxes, but defer it to brk/sbrk() */
uzero((uint8_t *)progptr, bss);
- // Set initial break for program
+ /* Set initial break for program */
udata.u_break = (int)ALIGNUP(progptr + bss);
/* Turn off caught signals */
bool rargs(char **userspace_argv, struct s_argblk * argbuf)
{
char *ptr; /* Address of base of arg strings in user space */
+ char *up = (char *)userspace_argv;
uint8_t c;
uint8_t *bufp;
argbuf->a_argc = 0; /* Store argc in argbuf */
bufp = argbuf->a_buf;
- while ((ptr = (char *) ugetw(userspace_argv++)) != NULL) {
+ while ((ptr = (char *) ugetp(up)) != NULL) {
+ up += sizeof(uptr_t);
++(argbuf->a_argc); /* Store argc in argbuf. */
do {
*bufp++ = c = ugetc(ptr++);
char **wargs(char *ptr, struct s_argblk *argbuf, int *cnt) // ptr is in userspace
{
- char **argv; /* Address of users argv[], just below ptr */
+ char *argv; /* Address of users argv[], just below ptr */
int argc, arglen;
- char **argbase;
+ char *argbase;
uint8_t *sptr;
sptr = argbuf->a_buf;
/* Set argv to point below the argument strings */
argc = argbuf->a_argc;
- argbase = argv = (char **) ptr - (argc + 1);
+ argbase = argv = ptr - sizeof(uptr_t) * (argc + 1);
if (cnt) {
*cnt = argc;
/* Set each element of argv[] to point to its argument string */
while (argc--) {
- uputw((uint16_t) ptr, argv++);
+ uputp((uptr_t) ptr, argv);
+ argv += sizeof(uptr_t);
if (argc) {
do
++ptr;
while (*sptr++);
}
}
- uputw(0, argv); /*;;26Feb- Add Null Pointer to end of array */
- return ((char **) argbase);
+ uputp(0, argv); /*;;26Feb- Add Null Pointer to end of array */
+ return (char **) argbase;
}
/*