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

Reply via email to