Author: miguel Date: 2007-12-22 16:51:54 -0500 (Sat, 22 Dec 2007) New Revision: 91813
Added: trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFile.cs trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFileStream.cs Modified: trunk/mcs/class/corlib/corlib.dll.sources Log: Add early implementation (will be redone with 2.0 anyways) of IsolatedStorage Added: trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFile.cs =================================================================== --- trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFile.cs 2007-12-22 19:32:50 UTC (rev 91812) +++ trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFile.cs 2007-12-22 21:51:54 UTC (rev 91813) @@ -0,0 +1,162 @@ +// +// System.IO.IsolatedStorage.MoonIsolatedStorageFile +// +// Moonlight's implementation for the IsolatedStorageFile +// +// Authors +// Miguel de Icaza ([EMAIL PROTECTED]) +// +// Copyright (C) 2007 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 +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +#if NET_2_1 +using System; +using System.IO; +using System.Security; + +namespace System.IO.IsolatedStorage { + + public sealed class IsolatedStorageFile : IDisposable { + static string appdir; + + static string TryDirectory (string path) + { + try { + Directory.CreateDirectory (path); + return path; + } catch { + return null; + } + } + + static IsolatedStorageFile () + { + string xdg_data_home = Environment.GetEnvironmentVariable ("XDG_DATA_HOME"); + if (xdg_data_home == null || xdg_data_home == String.Empty){ + xdg_data_home = Environment.GetFolderPath (Environment.SpecialFolder.LocalApplicationData); + } + + string basedir; + basedir = TryDirectory (Path.Combine (xdg_data_home, "moonlight")); + if (basedir == null){ + // + // Maybe try a few others? + // + return; + } + + // FIXME: Use the actual url from the plugin for this. + appdir = Path.Combine (basedir, "url"); + try { + Directory.CreateDirectory (appdir); + } catch { + appdir = null; + } + } + + internal IsolatedStorageFile (string basedir) + { + } + + [SecuritySafeCritical] + public static IsolatedStorageFile GetUserStoreForApplication () + { + if (appdir == null) + throw new SecurityException (); + + return new IsolatedStorageFile (appdir); + } + + internal static string Verify (string path) + { + try { + string full = Path.GetFullPath (Path.Combine (appdir, path)); + if (full.StartsWith (appdir + Path.DirectorySeparatorChar)) + return full; + } catch { + throw new IsolatedStorageException (); + } + throw new IsolatedStorageException (); + } + + [SecuritySafeCritical] + public void CreateDirectory (string dir) + { + Verify (dir); + Directory.CreateDirectory (dir); + } + + [SecuritySafeCritical] + public void DeleteDirectory (string dir) + { + Verify (dir); + Directory.Delete (dir); + } + + [SecuritySafeCritical] + public string [] GetDirectoryNames (string searchPattern) + { + if (searchPattern.IndexOf ('/') != -1) + throw new IsolatedStorageException (); + + return Directory.GetDirectories (appdir, searchPattern); + } + + [SecuritySafeCritical] + public string [] GetFileNames (string searchPattern) + { + if (searchPattern.IndexOf ('/') != -1) + throw new IsolatedStorageException (); + + return Directory.GetDirectories (appdir, searchPattern); + } + + [SecuritySafeCritical] + public void DeleteFile (string file) + { + Verify (file); + } + + public void Dispose () + { + } + + [SecuritySafeCritical] + public void Close () + { + } + + [CLSCompliant(false)] + public ulong CurrentSize { + get { + return 0; + } + } + + [CLSCompliant(false)] + public ulong MaximumSize { + get { + return 1024*1024; + } + } + } +} +#endif \ No newline at end of file Property changes on: trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFile.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFileStream.cs =================================================================== --- trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFileStream.cs 2007-12-22 19:32:50 UTC (rev 91812) +++ trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFileStream.cs 2007-12-22 21:51:54 UTC (rev 91813) @@ -0,0 +1,138 @@ +// +// System.IO.IsolatedStorage.MoonIsolatedStorageFileStream +// +// Moonlight's implementation for the IsolatedStorageFileStream +// +// Authors +// Miguel de Icaza ([EMAIL PROTECTED]) +// +// Copyright (C) 2007 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 +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +#if NET_2_1 +using System; +using System.IO; + +namespace System.IO.IsolatedStorage { + + public class IsolatedStorageFileStream : FileStream { + IsolatedStorageFile container; + + public IsolatedStorageFileStream (string path, FileMode mode, IsolatedStorageFile isf) + : base (IsolatedStorageFile.Verify (path), mode) + { + container = isf; + } + + public IsolatedStorageFileStream (string path, FileMode mode, FileAccess access, IsolatedStorageFile isf) + : base (IsolatedStorageFile.Verify (path), mode, access) + { + container = isf; + } + + public IsolatedStorageFileStream (string path, FileMode mode, FileAccess access, FileShare share, IsolatedStorageFile isf) + : base (IsolatedStorageFile.Verify (path), mode, access, share) + { + container = isf; + } + + protected override void Dispose (bool disposing) + { + base.Dispose (disposing); + } + + public override void Flush () + { + base.Flush (); + } + + public override int Read (byte [] buffer, int offset, int count) + { + return base.Read (buffer, offset, count); + } + + public override int ReadByte () + { + return base.ReadByte (); + } + + public override long Seek (long offset, SeekOrigin origin) + { + return base.Seek (offset, origin); + } + + public override void SetLength (long value) + { + base.SetLength (value); + } + + public override void Write (byte [] buffer, int offset, int count) + { + base.Write (buffer, offset, count); + } + + public override void WriteByte (byte value) + { + WriteByte (value); + } + + public override bool CanRead { + get { + return base.CanRead; + } + } + + public override bool CanSeek { + get { + return base.CanSeek; + } + } + + public override bool CanWrite { + get { + return base.CanWrite; + } + } + + public override bool IsAsync { + get { + return base.IsAsync; + } + } + + public override long Length { + get { + return base.Length; + } + } + + public override long Position { + get { + return base.Position; + } + + set { + base.Position = value; + } + } + } +} +#endif \ No newline at end of file Property changes on: trunk/mcs/class/corlib/System.IO.IsolatedStorage/MoonIsolatedStorageFileStream.cs ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/mcs/class/corlib/corlib.dll.sources =================================================================== --- trunk/mcs/class/corlib/corlib.dll.sources 2007-12-22 19:32:50 UTC (rev 91812) +++ trunk/mcs/class/corlib/corlib.dll.sources 2007-12-22 21:51:54 UTC (rev 91813) @@ -409,8 +409,10 @@ System.IO.IsolatedStorage/IsolatedStorage.cs System.IO.IsolatedStorage/IsolatedStorageException.cs System.IO.IsolatedStorage/IsolatedStorageFile.cs +System.IO.IsolatedStorage/MoonIsolatedStorageFile.cs System.IO.IsolatedStorage/IsolatedStorageFileEnumerator.cs System.IO.IsolatedStorage/IsolatedStorageFileStream.cs +System.IO.IsolatedStorage/MoonIsolatedStorageFileStream.cs System.IO.IsolatedStorage/IsolatedStorageScope.cs System.Reflection/AmbiguousMatchException.cs System.Reflection/Assembly.cs _______________________________________________ Mono-patches maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-patches
