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 'user=testu...@example.com' 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 'logname=testu...@example.com' [/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 opensolaris-code@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/opensolaris-code