for ( *p = PL_strtok_r(value, ",", &nextstr);
PrefResult PREF_GetListPref(const char* pref, char*** list, PRBool isDefault)/* Splits a comma separated string into an array of strings. * The array of strings is actually just an array of pointers into a copy * of the value returned by PREF_CopyCharPref().  So, we don't have to * allocate each string separately.----------------------------------------------------------------------------------------*/{    char* value;    char** p;    int nugmembers;#ifdef HAVE_STRTOK_R    char* nextstr;#endif    *list = NULL;    if ( PREF_CopyCharPref(pref, &value, isDefault) != PREF_OK || value == NULL )        return PREF_ERROR;    nugmembers = pref_CountListMembers(value);    p = *list = (char**) PR_MALLOC((nugmembers+1) * sizeof(char**));    if ( *list == NULL ) return PREF_ERROR;#ifdef HAVE_STRTOK_R    for ( *p = strtok_r(value, ",", &nextstr);          *p != NULL;          *(++p) = strtok_r(nextstr, ",", &nextstr) ) /* Empty body */ ;#else    for ( *p = strtok(value, ",");           *p != NULL;           *(++p) = strtok(NULL, ",") ) /* Empty body */ ;#endif    /* Copy each entry so that users can free them. */    for ( p = *list; *p != NULL; p++ )        *p = PL_strdup(*p);    PR_Free(value);    return PREF_OK;}