Thanks for holding my hand guys, this appears to work although I am certain it
is ugly. Any direct suggestions ?
[code]<pre>
// Straight from exec.c
static int
stk_getptr(model_t from_model, char *src, char **dst)
{
int error;
if (from_model == DATAMODEL_NATIVE) {
ulong_t ptr;
error = fulword(src, &ptr);
*dst = (caddr_t)ptr;
} else {
uint32_t ptr;
error = fuword32(src, &ptr);
*dst = (caddr_t)(uintptr_t)ptr;
}
return (error);
}
char *get_home(void)
{
proc_t *p = ttoproc(curthread);
user_t *up = PTOU(p);
size_t ptrsize;
int error, i;
char strbuff[512];
size_t len;
char *envp, *test = NULL;
if (p->p_model == DATAMODEL_NATIVE) {
ptrsize = sizeof (long);
} else {
ptrsize = sizeof (int32_t);
}
cmn_err(CE_NOTE, "ptrsize is %d:", ptrsize);
envp = (char *)up->u_envp;
cmn_err(CE_NOTE, "envp is %p:", envp);
if (envp != NULL) {
do {
test = NULL;
if (stk_getptr(p->p_model, envp, &test))
break;
if (test == NULL) // Last envp located?
break;
cmn_err(CE_NOTE, "test is %p", test);
len = 0;
error = copyinstr(test, strbuff, sizeof (strbuff), &len);
cmn_err(CE_NOTE, "copyinstr() => %d, with len %d", error, len);
if (error || (len <= 0)) break;
cmn_err(CE_NOTE, "str is '%s'", strbuff);
// Increase to next ptr.
envp += ptrsize;
} while (test != NULL); // Redundant test
} // envp != NULL
Apr 26 11:06:36 ssh00.unix flkm: NOTICE: ptrsize is 4:
Apr 26 11:06:36 ssh00.unix flkm: NOTICE: envp is 8047e14:
Apr 26 11:06:36 ssh00.unix flkm: NOTICE: test is 8047eb2
Apr 26 11:06:36 ssh00.unix flkm: NOTICE: copyinstr() => 0, with len 28
Apr 26 11:06:36 ssh00.unix flkm: NOTICE: str is '[email protected]'
Apr 26 11:06:36 ssh00.unix flkm: NOTICE: test is 8047ece
Apr 26 11:06:36 ssh00.unix flkm: NOTICE: copyinstr() => 0, with len 31
Apr 26 11:06:36 ssh00.unix flkm: NOTICE: str is '[email protected]'
[/code]</pre>
Should I be locking anything while I am peeking around on the user stack?
Perhaps "p_lock" ? exec.c do not appear to use it during stk_copyin(), and
stk_copyout() though.
Lund
ps. Does jive feature a better way to post code, since it does not do [code],
nor <pre>
--
This message posted from opensolaris.org
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code