nsresult PREF_GetCharPref(const char *pref_name, char * return_buffer, int * length, PRBool get_default) { if (!gHashTable.ops) return NS_ERROR_NOT_INITIALIZED; nsresult rv = NS_ERROR_UNEXPECTED; char* stringVal; PrefHashEntry* pref = pref_HashTableLookup(pref_name); if (pref) { if (get_default || PREF_IS_LOCKED(pref) || !PREF_HAS_USER_VALUE(pref)) stringVal = pref->defaultPref.stringVal; else stringVal = pref->userPref.stringVal; if (stringVal) { if (*length <= 0) *length = PL_strlen(stringVal) + 1; else { PL_strncpy(return_buffer, stringVal, NS_MIN<size_t>(*length - 1, PL_strlen(stringVal) + 1)); return_buffer[*length - 1] = '\0'; } rv = NS_OK; } } return rv; }
nsresult PREF_LockPref(const char *key, bool lockit) { if (!gHashTable.ops) return NS_ERROR_NOT_INITIALIZED; PrefHashEntry* pref = pref_HashTableLookup(key); if (!pref) return NS_ERROR_UNEXPECTED; if (lockit) { if (!PREF_IS_LOCKED(pref)) { pref->flags |= PREF_LOCKED; gIsAnyPrefLocked = true; pref_DoCallback(key); } } else { if (PREF_IS_LOCKED(pref)) { pref->flags &= ~PREF_LOCKED; pref_DoCallback(key); } } return NS_OK; }
nsresult PREF_GetBoolPref(const char *pref_name, bool * return_value, bool get_default) { if (!gHashTable.ops) return NS_ERROR_NOT_INITIALIZED; nsresult rv = NS_ERROR_UNEXPECTED; PrefHashEntry* pref = pref_HashTableLookup(pref_name); //NS_ASSERTION(pref, pref_name); if (pref && (pref->flags & PREF_BOOL)) { if (get_default || PREF_IS_LOCKED(pref) || !PREF_HAS_USER_VALUE(pref)) { bool tempBool = pref->defaultPref.boolVal; /* check to see if we even had a default */ if (pref->flags & PREF_HAS_DEFAULT) { *return_value = tempBool; rv = NS_OK; } } else { *return_value = pref->userPref.boolVal; rv = NS_OK; } } return rv; }
nsresult PREF_ClearUserPref(const char *pref_name) { if (!gHashTable.ops) return NS_ERROR_NOT_INITIALIZED; nsresult rv = NS_ERROR_UNEXPECTED; PrefHashEntry* pref = pref_HashTableLookup(pref_name); if (pref && PREF_HAS_USER_VALUE(pref)) { pref->flags &= ~PREF_USERSET; if ((pref->flags & PREF_INT && pref->defaultPref.intVal == ((PRInt32) BOGUS_DEFAULT_INT_PREF_VALUE)) || (pref->flags & PREF_BOOL && pref->defaultPref.boolVal == ((PRBool) BOGUS_DEFAULT_BOOL_PREF_VALUE)) || (pref->flags & PREF_STRING && !pref->defaultPref.stringVal)) { PL_DHashTableOperate(&gHashTable, pref_name, PL_DHASH_REMOVE); } if (gCallbacksEnabled) pref_DoCallback(pref_name); gDirty = PR_TRUE; rv = NS_OK; } return rv; }
bool PREF_PrefIsLocked(const char *pref_name) { bool result = false; if (gIsAnyPrefLocked && gHashTable.ops) { PrefHashEntry* pref = pref_HashTableLookup(pref_name); if (pref && PREF_IS_LOCKED(pref)) result = true; } return result; }
bool PREF_HasUserPref(const char *pref_name) { if (!gHashTable.ops) return false; PrefHashEntry *pref = pref_HashTableLookup(pref_name); if (!pref) return false; /* convert PREF_HAS_USER_VALUE to bool */ return (PREF_HAS_USER_VALUE(pref) != 0); }
PRBool PREF_PrefIsLocked(const char *pref_name) { PRBool result = PR_FALSE; if (gIsAnyPrefLocked && gHashTable.ops) { PrefHashEntry* pref = pref_HashTableLookup(pref_name); if (pref && PREF_IS_LOCKED(pref)) result = PR_TRUE; } return result; }
PrefType PREF_GetPrefType(const char *pref_name) { if (gHashTable.ops) { PrefHashEntry* pref = pref_HashTableLookup(pref_name); if (pref) { if (pref->flags & PREF_STRING) return PREF_STRING; else if (pref->flags & PREF_INT) return PREF_INT; else if (pref->flags & PREF_BOOL) return PREF_BOOL; } } return PREF_INVALID; }
nsresult PREF_ClearUserPref(const char *pref_name) { if (!gHashTable.ops) return NS_ERROR_NOT_INITIALIZED; PrefHashEntry* pref = pref_HashTableLookup(pref_name); if (pref && PREF_HAS_USER_VALUE(pref)) { pref->flags &= ~PREF_USERSET; if (!(pref->flags & PREF_HAS_DEFAULT)) { PL_DHashTableOperate(&gHashTable, pref_name, PL_DHASH_REMOVE); } pref_DoCallback(pref_name); gDirty = true; } return NS_OK; }
nsresult PREF_GetIntPref(const char *pref_name,PRInt32 * return_int, bool get_default) { if (!gHashTable.ops) return NS_ERROR_NOT_INITIALIZED; nsresult rv = NS_ERROR_UNEXPECTED; PrefHashEntry* pref = pref_HashTableLookup(pref_name); if (pref && (pref->flags & PREF_INT)) { if (get_default || PREF_IS_LOCKED(pref) || !PREF_HAS_USER_VALUE(pref)) { PRInt32 tempInt = pref->defaultPref.intVal; /* check to see if we even had a default */ if (!(pref->flags & PREF_HAS_DEFAULT)) return NS_ERROR_UNEXPECTED; *return_int = tempInt; } else *return_int = pref->userPref.intVal; rv = NS_OK; } return rv; }
nsresult PREF_CopyCharPref(const char *pref_name, char ** return_buffer, bool get_default) { if (!gHashTable.ops) return NS_ERROR_NOT_INITIALIZED; nsresult rv = NS_ERROR_UNEXPECTED; char* stringVal; PrefHashEntry* pref = pref_HashTableLookup(pref_name); if (pref && (pref->flags & PREF_STRING)) { if (get_default || PREF_IS_LOCKED(pref) || !PREF_HAS_USER_VALUE(pref)) stringVal = pref->defaultPref.stringVal; else stringVal = pref->userPref.stringVal; if (stringVal) { *return_buffer = NS_strdup(stringVal); rv = NS_OK; } } return rv; }