The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
//#include <mozilla/gtkmozembed_internal.h>
#include <mozilla/nsCOMPtr.h>
#include <mozilla/nsIPref.h>
#include <glib.h>

#define PREF_ID NS_PREF_CONTRACTID

extern "C" gboolean
mozilla_preference_set(const char *preference_name, const char *new_value)
{
  g_return_val_if_fail (preference_name != NULL, FALSE);
  g_return_val_if_fail (new_value != NULL, FALSE);
  nsCOMPtr<nsIPref> pref = do_CreateInstance(PREF_ID);

  if (pref)
    {
      nsresult rv = pref->SetCharPref (preference_name, new_value);            
      return NS_SUCCEEDED (rv) ? TRUE : FALSE;
    }
  
  return FALSE;
}

extern "C" gboolean
mozilla_preference_set_boolean (const char        *preference_name,
                                gboolean        new_boolean_value)
{
  g_return_val_if_fail (preference_name != NULL, FALSE);
  
  nsCOMPtr<nsIPref> pref = do_CreateInstance(PREF_ID);
  
  if (pref)
    {
      nsresult rv = pref->SetBoolPref (preference_name,
                                       new_boolean_value ? PR_TRUE : PR_FALSE);
      
      return NS_SUCCEEDED (rv) ? TRUE : FALSE;
    }
  
  return FALSE;
}

extern "C" gboolean
mozilla_preference_set_int (const char        *preference_name,
                                int        new_int_value)
{
  g_return_val_if_fail (preference_name != NULL, FALSE);
  
  nsCOMPtr<nsIPref> pref = do_CreateInstance(PREF_ID);
  
  if (pref)
    {
      nsresult rv = pref->SetIntPref (preference_name,
                                       new_int_value);
      
      return NS_SUCCEEDED (rv) ? TRUE : FALSE;
    }
  
  return FALSE;
}