Development

NAVIGATION
CATEGORIES
REFERRENCE
LINKS
  • r63698 - trunk/mcs/class/corlib/Microsoft.Win32

    0 answers - 5989 bytes - related search similar search Add To My Delicious Add To My Stumble Upon Add To My Google Mark Add To My Facebook Add To My Digg Add To My Reddit

    Author: miguel
    Date: 2006-08-13 23:49:08 -0400 (Sun, 13 Aug 2006)
    New Revision: 63698
    Modified:
    Log:
    2006-08-13 Miguel de Icaza <miguel (AT) novell (DOT) com>
    * Registry.cs (SetValue, GetValue): implement.
    * UnixRegistryApi.cs (KeyHandler.LoadKey, KeyHandler.Save): Add
    support for qwords.
    (KeyHandler.Save): Do not save the entries if they have been
    deleted/dropped. Fixes a crash.
    (UnixRegistryApi.DeleteKey): bug fix, call ToUnix on the keyname.
    Modified:
    2006-08-14 03:31:44 UTC (rev 63697)
    2006-08-14 03:49:08 UTC (rev 63698)
    @@ -1,3 +1,15 @@
    +2006-08-13 Miguel de Icaza <miguel (AT) novell (DOT) com>
    +
    +* Registry.cs (SetValue, GetValue): implement.
    +
    +* UnixRegistryApi.cs (KeyHandler.LoadKey, KeyHandler.Save): Add
    +support for qwords.
    +
    +(KeyHandler.Save): Do not save the entries if they have been
    +deleted/dropped. Fixes a crash.
    +
    +(UnixRegistryApi.DeleteKey): bug fix, call ToUnix on the keyname.
    +
    2006-08-12 Gert Driesen <drieseng (AT) users (DOT) sourceforge.net>
    * Registry.cs: Fixed copy/paste bug.
    Modified:
    2006-08-14 03:31:44 UTC (rev 63697)
    2006-08-14 03:49:08 UTC (rev 63698)
    @@ -2,11 +2,12 @@
    // Microsoft.Win32.Registry.cs
    //
    // Author:
    +// Miguel de Icaza (miguel (AT) novell (DOT) com)
    // stubbed out by Alexandre Pigolkine (pigolkine (AT) gmx (DOT) de)
    //
    //
    -// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
    +// Copyright (C) 2004, 2005 Novell, Inc (http://www.novell.com)
    //
    // Permission is hereby granted, free of charge, to any person obtaining
    // a copy of this software and associated documentation files (the
    @@ -32,7 +33,13 @@
    namespace Microsoft.Win32
    {
    -public sealed class Registry
    +public
    +#if NET_2_0
    +sealed
    +#else
    +sealed static
    +#endif
    +class Registry
    {
    private Registry () { }
    public static readonly RegistryKey ClassesRoot = new RegistryKey (
    @@ -49,5 +56,74 @@
    RegistryHive.PerformanceData, "HKEY_PERFRMANCE_DATA");
    public static readonly RegistryKey Users = new RegistryKey (
    RegistryHive.Users, "HKEY_USERS");
    +
    +#if NET_2_0
    +static RegistryKey ToKey (string keyName, bool setting)
    +{
    +if (keyName == null)
    +throw new ArgumentException ("Not a valid registry key name", "keyName");
    +
    +RegistryKey key = null;
    +string [] keys = keyName.Split ('\\');
    +
    +switch (keys [0]){
    +case "HKEY_CLASSES_RT":
    +key = ClassesRoot;
    +break;
    +case "HKEY_CURRENT_CNFIG":
    +key = CurrentConfig;
    +break;
    +case "HKEY_CURRENT_USER":
    +key = CurrentUser;
    +break;
    +case "HKEY_DYN_DATA":
    +key = DynData;
    +break;
    +case "HKEY_LCAL_MACHINE":
    +key = LocalMachine;
    +break;
    +case "HKEY_PERFRMANCE_DATA":
    +key = PerformanceData;
    +break;
    +case "HKEY_USERS":
    +key = Users;
    +break;
    +default:
    +throw new ArgumentException ("Keyname does not start with a valid registry root", "keyName");
    +}
    +
    +for (int i = 1; i < keys.Length; i++){
    +RegistryKey nkey = SubKey (keys [i], true);
    +if (nkey == null){
    +if (!setting)
    +return null;
    +nkey = key.CreateSubKey (keys [i]);
    +}
    +key = nkey;
    +}
    +return key;
    +}
    +
    +public static void SetValue (string keyName, string valueName, object value)
    +{
    +RegistryKey key = ToKey (keyName, true);
    +if (valueName.Length 255)
    +throw new ArgumentException ("valueName is larger than 255 characters", "valueName");
    +
    +if (key == null)
    +throw new ArgumentException ("cant locate that keyName", "keyName");
    +
    +key.SetValue (valueName, value);
    +}
    +
    +public static object GetValue (string keyName, string valueName, object defaultValue)
    +{
    +RegistryKey key = ToKey (keyName, false);
    +if (key == null)
    +return defaultValue;
    +
    +return key.GetValue (valueName, defaultValue);
    +}
    +#endif
    }
    }
    Modified:
    2006-08-14 03:31:44 UTC (rev 63697)
    2006-08-14 03:49:08 UTC (rev 63698)
    @@ -55,6 +55,7 @@
    public Hashtable values;
    string file;
    bool dirty;
    +bool valid;
    KeyHandler (RegistryKey rkey, string basedir)
    {
    @@ -119,6 +120,9 @@
    case "string":
    values [name] = se.Text;
    break;
    +case "qword":
    +values [name] = Int64.Parse (se.Text);
    +break;
    case "string-array":
    ArrayList sa = new ArrayList ();
    if (se.Children != null){
    @@ -206,6 +210,7 @@
    KeyHandler k = (KeyHandler) key_to_handler [rkey];
    if (k == null)
    return;
    +k.valid = false;
    dir_to_key.Remove (k.Dir);
    key_to_handler.Remove (rkey);
    }
    @@ -213,8 +218,8 @@
    public static void Drop (string dir)
    {
    if (dir_to_key.Contains (dir)){
    -key_to_handler.Remove (dir_to_key [dir]);
    -dir_to_key.Remove (dir);
    +RegistryKey rkey = (RegistryKey) dir_to_key [dir];
    +Drop (rkey);
    }
    }
    @@ -259,6 +264,9 @@
    void Save ()
    {
    +if (!valid)
    +return;
    +
    if (!File.Exists (file) && values.Count == 0)
    return;
    @@ -275,6 +283,9 @@
    } else if (val is int){
    value.AddAttribute ("type", "int");
    value.Text = val.ToString ();
    +} else if (val is long){
    +value.AddAttribute ("type", "qword");
    +value.Text = val.ToString ();
    } else if (val is byte []){
    value.AddAttribute ("type", "bytearray");
    value.Text = Convert.ToBase64String ((byte[]) val);
    @@ -405,8 +416,8 @@
    public void DeleteKey (RegistryKey rkey, string keyname, bool throw_if_missing)
    {
    KeyHandler self = KeyHandler.Lookup (rkey);
    -string dir = Path.Combine (self.Dir, keyname);
    -
    +string dir = Path.Combine (self.Dir, ToUnix (keyname));
    +
    if (Directory.Exists (dir)){
    Directory.Delete (dir, true);
    KeyHandler.Drop (dir);
    Mono-patches maillist - Mono-patches (AT) lists (DOT) ximian.com

Re: r63698 - trunk/mcs/class/corlib/Microsoft.Win32


max 4000 letters.
Your nickname that display:
In order to stop the spam: 5 + 4 =
QUESTION ON "Development"

EMSDN.COM