if (!XPT_SetAddrForOffset(my_cursor, my_cursor->offset, ident)) {
if (!XPT_SetAddrForOffset(&my_cursor, my_cursor.offset, ident)) {
XPT_DoCString(XPTCursor *cursor, char **identp){    XPTCursor my_cursor;    char *ident = *identp;    PRBool already;        XPT_PREAMBLE_NO_ALLOC(cursor, identp, XPT_DATA, strlen(ident) + 1,                          my_cursor, already, ident);    if (mode == XPT_DECODE) {        char *start = my_cursor->state->data[my_cursor->offset], *end;        int len;        end = strchr(start, 0); /* find the end of the string */        if (!end) {            fprintf(stderr, "didn't find end of string on decode!\n");            return PR_FALSE;        }        len = end - start;        ident = PR_MALLOC(len + 1);        if (!ident)            return PR_FALSE;        memcpy(ident, start, len);        ident[len] = 0;        *identp = ident;        if (!XPT_SetAddrForOffset(my_cursor, my_cursor->offset, ident)) {            PR_FREE(ident);            return PR_FALSE;        }    } else {        while(*ident)            if (!XPT_Do8(&my_cursor, ident++))                return PR_FALSE;        if (!XPT_Do8(&my_cursor, ident)) /* write trailing zero */            return PR_FALSE;    }        return PR_TRUE;}