Example #1
0
gboolean
gdm_settings_direct_get_int (const char        *key,
                             int               *value)
{
        GdmSettingsEntry *entry;
        gboolean          ret;
        gboolean          res;
        char             *str;

        g_return_val_if_fail (key != NULL, FALSE);

        entry = get_entry_for_key (key);
        g_assert (entry != NULL);

        assert_signature (entry, "i");

        ret = FALSE;

        res = get_value (key, &str);

        if (! res) {
                /* use the default */
                str = g_strdup (gdm_settings_entry_get_default_value (entry));
        }

        ret = gdm_settings_parse_value_as_integer (str, value);

        g_free (str);

        return ret;
}
Example #2
0
gboolean
gdm_settings_direct_get_string (const char        *key,
                                char             **value)
{
        GdmSettingsEntry *entry;
        gboolean          ret;
        gboolean          res;
        char             *str;

        g_return_val_if_fail (key != NULL, FALSE);

        entry = get_entry_for_key (key);
        g_assert (entry != NULL);

        assert_signature (entry, "s");

        ret = TRUE;

        res = get_value (key, &str);

        if (! res) {
                /* use the default */
                str = g_strdup (gdm_settings_entry_get_default_value (entry));
        }

        if (value != NULL) {
                *value = g_strdup (str);
        }

        g_free (str);

        return ret;
}
Example #3
0
 // Thread-safe, but if somebody can remove the key while find() is
 // in progress, then any returned value is not guaranteed to correspond
 // to that key. This also applies if the key was not already present but
 // once was. Elements can be found in any order.
 TValue* find(std::uint64_t key)
 {
     auto idxEntry = get_entry_for_key(key);
     if (idxEntry == nullptr)
         return nullptr;
     return idxEntry->value.load(std::memory_order_acquire);
 }
Example #4
0
 // Thread-safe, but if somebody else can remove the same key while remove()
 // is in progress, then any removed value is not guaranteed to correspond
 // to that key This also applies if the key was not already present but
 // once was. Elements can be removed in an order.
 TValue* remove(std::uint64_t key)
 {
     auto idxEntry = get_entry_for_key(key);
     if (idxEntry == nullptr)
         return nullptr;
     TValue* val = nullptr;
     while (!idxEntry->value.compare_exchange_weak(val, nullptr, std::memory_order_acquire, std::memory_order_relaxed))
         continue;
     return val;
 }