2010-05-27 Jb Evain <jbevain@novell.com>
[mcs.git] / class / Mono.Posix / Mono.Unix / ChangeLog
blobd1b975c6ce56844a9ea27df526710f7172907bc8
1 2010-04-15  Jonathan Pryor  <jpryor@novell.com>
3         * UnixSignal.cs: Change the native WaitAny() method to accept a
4           Mono_Posix_RuntimeIsShuttingDown delegate, so that we can prevent an
5           infinite loop while shutting the process down.  Fixes #592981.
7 2009-03-23  Jonathan Pryor  <jpryor@novell.com>
9         * UnixDriveInfo.cs: UnixDriveInfo.AvailableFreeSpace needs to return 
10           stat.f_bavail * stat.f_frsize, NOT f_bavail*f_bsize, as on some
11           platforms (Solaris) bsize is the preferred block I/O size, while
12           f_frsize is the *actual* filesystem block size.  Thus, to get proper
13           disk under Solaris, we need to s/f_bsize/f_frsize/g.
15 2009-02-20  Jonathan Pryor  <jpryor@novell.com>
17         * UnixSignal.cs: Add a pipecnt member to UnixSignal.SignalIinfo.
18           Patch thanks to tim.jenks@realtimeworlds.com.
20 2009-02-09  Jonathan Pryor  <jpryor@novell.com>
22         * UnixGroupInfo.cs (GetMembers): Skip group members which aren't valid
23           users on the system (thus removing a possible exception).  Patch
24           thanks to Daniel Peñalba.
26 2009-01-08  Rodrigo Kumpera  <rkumpera@novell.com>
28         * UnixSignal.cs: Check if realtime signal install failed with 
29         EADDRINUSE due to the signal been used by outside of Mono.Posix.
31 2008-12-19  Jonathan Pryor  <jpryor@novell.com>
33         * UnixSignal.cs: Allow RealTimeSignums to be used in addition to
34           Signum, so that real time signals can be used.  Patch thanks to 
35           tim.jenks@realtimeworlds.com.
37 2008-11-04  Andrés G. Aragoneses  <aaragoneses@novell.com>
39         * UnixStream.cs: Do not check offset against int.MaxValue 
40         (System.IO doesn't have it). Reviewed by Jonathan Pryor.
41         Bug reported by Siro Blanco <siro.blanco@gmail.com>.
43 2008-11-03  Miguel de Icaza  <miguel@novell.com>
45         * UnixClient.cs (Client): Make this property public when using the
46         Mono 2.0 profile, based on a discussion with Vlad Hociota and Joe
47         Shaw. 
49 2008-02-11  Jonathan Pryor  <jpryor@novell.com>
51         * UnixSignal.cs: Improve argument checking to match docs.
53 2008-02-08  Jonathan Pryor  <jpryor@novell.com>
55         * UnixSignal.cs: UnixSignal.WaitAny() should have the same return type as
56           WaitHandle.WaitAny().  Oops.
58 2008-02-08  Jonathan Pryor  <jpryor@novell.com>
60         * UnixSignal.cs: Modification of Info->count should be thread safe.
62 2008-01-28  Jonathan Pryor  <jpryor@novell.com>
64         * UnixSignal.cs: Added; Polling and blocking based Unix signal mechanism.
65           http://lists.ximian.com/pipermail/mono-devel-list/2008-January/026501.html
67 2008-01-22  Sebastien Pouliot  <sebastien@ximian.com>
69         * UnixPipes.cs: Fix Equals to avoid NRE (and return false if object 
70         is null). Found using Gendarme.
72 2007-12-17  Jonathan Pryor  <jpryor@novell.com>
74         * UnixEnvironment.cs: Update MachineName property accesor to use uname(2)
75           instead of gethostname(2), as gethostname(2) truncates the machine name to
76           16 characters, while uname(2) doesn't.
78 2007-12-17  Jonathan Pryor  <jonpryor@vt.edu>
80         * UnixDirectoryInfo.cs: Fix Parent property so that it properly handles
81           returning the parent of "/".  UnixPath.GetDirectoryName() returns "" on
82           "error", not null; act accordingly.
83         * UnixDriveInfo.cs: Fix IsReady property so that it returns `false' if no
84           media is mounted.  The presence of media is determined by comparing the
85           Statvfs.f_fsid value of the current and parent directories; if they
86           differ, it is assumed that media is present, and thus the directory is
87           ready.  If they're identical, then media isn't present, and the directory
88           isn't ready.
89         * UnixPath.cs: UnixPath.GetDirectoryName("/mnt") should return "/", not "".
91 2007-09-13  Jonathan Pryor  <jonpryor@vt.edu>
93         * UnixStream.cs: Don't read/write if the buffer has no data.  Fixes #82836.
95 2006-10-24  Jonathan Pryor  <jonpryor@vt.edu>
97         * MapAttribute.cs: Moved to ../Mono.Unix.Native/MapAttribute.cs.
99 2006-08-21  Jonathan Pryor  <jonpryor@vt.edu>
101         * UnixStream.cs: .Close() shouldn't close(2) the fd unless owner==true;
102           .Flush() should be a no-op (as System.IO.Stream.Flush doesn't gaurantee
103           that .Flush() actually flush to disk, and .Flush() slows things down a
104           lot); see: http://joeshaw.org/2006/08/21/415.
106 2006-08-16  Alp Toker  <alp@atoker.com>
108         * UnixEndPoint.cs:
109         * AbstractUnixEndPoint.cs: Second half of the fix for #79084.
110                 Add support for the abstract namespace, and update existing file-based
111                 UnixEndPoint (de)serialization to reflect changes in the runtime.
113 2006-07-02  Jonathan Pryor  <jonpryor@vt.edu>
115         * UnixSymbolicLinkInfo.cs: Oops.  CreateSymbolicLinkTo() should create
116           FullPath, not OriginalName.  This was fixed in one overload in January,
117           but I missed an overload. :-/
119 2006-07-02  Jonathan Pryor  <jonpryor@vt.edu>
121         * UnixPath.cs: Follow .NET's System.IO.Path.Combine() behavior, and "reset"
122           the generated path if any argument beings with a path root --
123           UnixPath.Combine("/a", "/b") should return "/b", not "/a/b".  Fixes #78580.
125 2006-04-21  Jonathan Pryor  <jonpryor@vt.edu>
127         * UnixFileSystemInfo.cs: rename Create() to GetFileSystemEntry(), and make
128           it public (so that other's don't need to worry about the
129           Syscall.lstat()-and-switch to create a UnixFileSystemInfo instance).
130         * UnixDirectoryInfo.cs, UnixSymbolicLinkInfo.cs:
131           s/Create/GetFileSystemEntry/g (to cope with above change).
133 2006-03-09 Gonzalo Paniagua Javier <gonzalo@ximian.com>
135         * UnixEndPoint.cs: added GetHashCode/Equals.
137 2006-03-06  Jonathan Pryor  <jonpryor@vt.edu>
139         * UnixDriveInfo.cs: Remove requirement that mountPoints be avaible via
140           getfsfile(3).  This isn't always the case -- in particular drives mounted
141           via HAL and other mechanisms won't be listed in /etc/fstab, and thus won't
142           be returned via getfsfile(3).  If getfsfile(3) fails, then we "guess" on
143           the drive format and volume label.
144         * UnixStream.cs: RefreshStat() should assert that the instance hasn't been
145           disposed.
146         * UnixEnvironment.cs (GetConfigurationValue, GetConfigurationString): Fix
147           error checking.
149 2006-02-23  Jonathan Pryor  <jonpryor@vt.edu>
151         * UnixFileSystemInfo.cs: Create() should return a UnixFileInfo if the file
152           doesn't exist.  This allows callers to use UnixFileInfo.Exists to see if
153           the file exists, and behaves more rationally e.g. if the directory
154           contents changes while calling UnixDirectoryInfo.GetFileSystemEntries(),
155           we'll get a UnixFileInfo entry that doesn't exist instead of an exception
156           terminating the entire array creation.
157         * UnixSymbolicLinkInfo.cs: [Obsolete] the Contents property -- this property
158           *always* creates a new object if HasContents=true, and since a
159           UnixFileSystemInfo instance is (104+2*(sizeof(void*))+1) bytes (~113 bytes
160           on 32-bit platforms), we don't want to create these frequently.  Add a
161           GetContents() method as the replacement, to make it (slightly) more
162           explicit that information won't be cached (and thus should be cached by
163           the caller, if appropriate).  GetContents() throws an exception if
164           HasContents=false instead of returning null; this change brings the
165           implementation in line with the documentation.
167 2006-02-18  Alp Toker  <alp@atoker.com>
169         * UnixEndPoint.cs: Avoid truncation of last two bytes of SocketAddress
170         string
172 2006-01-26  Jonathan Pryor  <jonpryor@vt.edu>
174         * UnixMarshal.cs: Check for null arguments in PtrToString() and
175           PtrToStringArray().
177 2006-01-24  Jonathan Pryor  <jonpryor@vt.edu>
179         * UnixMarshal.cs (StringToHeap): Return IntPtr.Zero if `s' is null.
181 2006-01-24  Jonathan Pryor  <jonpryor@vt.edu>
183         * UnixMarshal.cs (StringToHeap): Check for null arguments.
185 2006-01-20  Jonathan Pryor  <jonpryor@vt.edu>
187         * UnixDriveInfo.cs: Properties should generate an InvalidOperationException,
188           not an IOException.  Users can use IsReady to avoid exception generation.
189         * UnixIOException.cs: Create a custom message that embeds the error name 
190           within the text, e.g. "Permission denied [EACCES]."
191         * UnixSymbolicLinkInfo.cs: This really should create the file FullPath, not
192           OriginalPath.  Created files shouldn't ever be relative to the current
193           working directory, as this can change at any time.
195 2006-01-15  Jonathan Pryor  <jonpryor@vt.edu>
197         * UnixUserInfo.cs: The UnixUserInfo(Native.Passwd) constructor and 
198           ToPasswd() should clone the underlying Native.Passwd, so
199           that it doesn't get changed from underneath it.
200         * UnixGroupInfo.cs: The UnixGroupInfo(Native.Group) constructor should also
201           clone the provided Native.Group instance.
203 2006-01-14  Jonathan Pryor  <jonpryor@vt.edu>
205         * UnixGroupInfo.cs: ToGroup() should clone the underlying Native.Group, so
206           that it doesn't get changed from underneath it.
208 2006-01-13  Jonathan Pryor  <jonpryor@vt.edu>
210         * Catalog.cs, UnixMarshal.cs: Throw `UnixIOException(Native.Errno.ENOMEM)`
211           instead of System.OutOfMemoryException.  OOME should be reserved for use 
212           by the CLR (according to FxDG).
214 2006-01-12  Jonathan Pryor  <jonpryor@vt.edu>
216         * UnixPath.cs: Add ReadLink() and TryReadLink() methods.
218 2006-01-12  Miguel de Icaza  <miguel@novell.com>
220         * PeerCred.cs: Do not define PeerCredData as this is a structure
221         known to the runtime.  Instead use the Mono.Posix.PeerCredData
222         internal class. 
224 2006-01-10  Jonathan Pryor <jonpryor@vt.edu>
226         * Catalog.cs: Don't use
227           System.Runtime.InteropServices.Marshal.StringToHGlobalAuto(), use
228           UnixMarshal.StringToHeap().  We require that the converted string be in
229           UTF-8 format, but .NET's Marshal.StringToHGlobalAuto converts to the local
230           code page, *not* UTF-8 (Mono's does UTF-8).  UnixMarshal.StringToHeap
231           *always* does UTF-8, so use that instead.
233 2006-01-09  Jonathan Pryor <jonpryor@vt.edu>
235         * FileTypes.cs: Remove [Flags] attribute -- these aren't bitfield values.
236         * UnixFileSystemInfo.cs: Fix Is<<Type>> properties -- before it would
237           erroneously say that a symlink was a character device.  (This is because
238           device values are *not* [Flags] values, but code was assuming they were.)
239         * UnixGroupInfo.cs: Clone the string[] returned from GetMemberNames().  We
240           don't want callers to change the underlying list.
242 2006-01-07  Jonathan Pryor <jonpryor@vt.edu>
244         * UnixMarshal.cs: *Actually* put things in alphabetical order (like the
245           comment says).  I can speak english, really I can.
247 2006-01-06  Jonathan Pryor <jonpryor@vt.edu>
249         * Catalog.cs: s/libintl/intl/g, since intl.dll is used by GTK+ on Windows,
250           not libintl.dll (according to
251           http://www.gimp.org/~tml/gimp/win32/downloads.html).
253 2006-01-03  Jonathan Pryor <jonpryor@vt.edu>
255         * UnixMarshal.cs (CreateExceptionForError): Don't map ENOMEM to
256           System.OutOfMemoryException.  OOME should be reserved for use by the CLR.
257           Return a UnixIOException instead (default behavior).
259 2006-01-02  Jonathan Pryor <jonpryor@vt.edu>
261         * StdioFileStream.cs: Shut up FxCop - add a GC.KeepAlive to 
262           AssertNotDisposed().
263         * UnixClient.cs, UnixListener.cs: Use System.MarshalByRefObject as the base
264           class.  These types implement IDisposable and have a finalizer, so if an
265           instance of these types were sent to another AppDomain they'd previously 
266           marshal by copy, which could lead to a double release of an unmanaged
267           resource -- potential badness.  Using MarshalByRefObject fixes this.
269 2006-01-02  Jonathan Pryor <jonpryor@vt.edu>
271         * UnixMarshal.cs: s/EACCESS/EACCES/g.  I can't read.
273 2006-01-02  Jonathan Pryor <jonpryor@vt.edu>
275         * StdioFileStream.cs, UnixDirectoryInfo.cs, UnixEnvironment.cs, 
276           UnixFileInfo.cs, UnixFileSystemInfo.cs, UnixGroupInfo.cs,
277           UnixIOException.cs, UnixMarshal.cs, UnixProcess.cs, UnixStream.cs,
278           UnixSymbolicLinkInfo.cs, UnixUserInfo.cs: Remove Obsolete API.
279         * CdeclFunction.cs, IncludeAttribute.cs, Stdlib.cs, Syscall.cs,
280           UnixConvert.cs, UnixDirectory.cs, UnixFile.cs, UnixGroup.cs, 
281           UnixUser.cs: Delete.
282         * UnixPath.cs: Remove InvalidPathChars; use GetInvalidPathChars() instead.
283         * FileTypes.cs: Remove Obsolete API
285 2006-01-02  Jonathan Pryor <jonpryor@vt.edu>
287         * FileAccessPermissions.cs: Remove UserMask, GroupMask, OtherMask values.
288         * FileSpecialAttributes.cs: Remove AllAttributes member; it shouldn't be
289           public.  Use UnixFileSystemInfo.AllSpecialAttributes instead.
290         * StdioFileStream.cs: Open files in binary mode, not text;
291           Fix exception message for StdioFileStream(path, mode) mode param check.
292         * UnixDirectoryInfo.cs: Add Create(FileAccessPermissions) overload; change
293           GetFileSystemEntries() to include the directory name that the files came
294           from (otherwise they're in the current working direcetory, which they
295           probably aren't).
296         * UnixFileInfo.cs: Add Create(FileAccessPermissions) overload; Add better
297           argument checking to several Open() overloads.
298         * UnixFileSystemInfo.cs: Add AllSpecialAttributes, AllFileTypes members;
299           FullPath member should invalidate instance if path changes; Change return
300           type of GetFileStatus for maintenance/better documentation; ToStat()
301           should ensure that the instance is valid first.
302         * UnixMarshal.cs: Add additional Errno values to CreateExceptionForError();
303           reformat CreateExceptionForError for maintenance.
304         * UnixPath.cs: Obsolete InvalidPathChars -- FxCop never liked it, and now I
305           know why it didn't like it (thank you Framework Design Guidelines!).
306         * UnixStream.cs: Use UnixFileSystemInfo.AllSpecialAttributes, not 
307           FileSpecialAttributes.AllAttributes (which was removed).
308         * UnixSymbolicLinkInfo.cs: Change return type of GetFileStatus().
310 2005-12-28  Jonathan Pryor <jonpryor@vt.edu>
312         * FileHandleOperations.cs: Check for null references.
314 2005-12-28  Jonathan Pryor <jonpryor@vt.edu>
316         * UnixMarshal.cs: Errno.EBADF should also trigger a ArgumentException.
318 2005-12-27  Jonathan Pryor <jonpryor@vt.edu>
320         * FileHandleOperations.cs, FileTypes.cs, Stdlib.cs, Syscall.cs, 
321           UnixConvert.cs, UnixDirectory.cs, UnixDirectoryInfo.cs, UnixDriveInfo.cs, 
322           UnixEnvironment.cs, UnixFile.cs, UnixFileInfo.cs, UnixFileSystemInfo.cs,
323           UnixGroup.cs, UnixGroupInfo.cs, UnixIOException.cs, UnixMarshal.cs, 
324           UnixPath.cs, UnixPipes.cs, UnixProcess.cs, UnixStream.cs, 
325           UnixSymbolicLinkInfo.cs, UnixUser.cs, UnixUserInfo.cs: Mark to-be-removed
326           API with [Obsolete(IsError=true)] (permits compiler assistance for finding
327           obsolete code); Migrate to the Mono.Unix.Native API.
328         * StdioFileStream.cs: Add non-Obsolete overloads for SaveFilePosition &
329           RestoreFilePosition (oops).  Migrate to Mono.Unix.Native API.
331 2005-12-07  Jonathan Pryor <jonpryor@vt.edu>
333         * UnixMarshal.cs: Add PtrToStringUnix() -- specialized PtrToString method
334           which is significantly faster than PtrToString(p, UnixEncoding.Instance). 
335           Use System.String..ctor(sbyte*, int, int, Encoding) to avoid the byte[]
336           intermediate copy -- much faster.  Fix PtrToString() so that it will
337           accept an IntPtr containing 0 characters, and don't duplicate strings
338           unless necessary.
340 2005-11-18  Jonathan Pryor <jonpryor@vt.edu>
342         * Catalog.cs, UnixDirectory.cs, UnixDirectoryInfo.cs, UnixDriveInfo.cs,
343           UnixEnvironment.cs, UnixFile.cs, UnixFileInfo.cs, UnixFileSystemInfo.cs,
344           UnixGroup.cs, UnixGroupInfo.cs, UnixProcess.cs, UnixSymbolicLinkInfo.cs,
345           UnixUser.cs, UnixUserInfo.cs: Change types of [Obsolete] members for
346           consistency and CLS compliance; Mono.Unix.Native type migration.
347         * FileTypes.cs: s/Special/Device/g (CharacterSpecial ==> CharacterDevice).
348           The *Special was a BSD convention, while UnixFileSystemInfo uses *Device
349           in property names, and these should be consistent.  Changing the enum is
350           simpler than changing the UnixFileSystemInfo properties.
351         * UnixIOException.cs: s/error/errno/g (FxCop suggestion); change type of
352           ErrorCode property.
353         * UnixMarshal.cs: s/error/errno/g (FxCop suggestion); Mono.Unix.Native
354           type migration.
356 2005-11-08  Jonathan Pryor <jonpryor@vt.edu>
358         * Catalog.cs: Exception safety improvements (don't let memory leak!); check
359           for errors with bindtextdomain(3) et. al.
361 2005-11-08  Jonathan Pryor <jonpryor@vt.edu>
363         * UnixPipes.cs: Provide Equals, GetHashCode, and operator==/operator!= to
364           conform with FxCop guidelines for structures.
366 2005-11-03  Jonathan Pryor <jonpryor@vt.edu>
368         * FileTypes.cs, UnixFileSystemInfo.cs: s/FIFO/Fifo/ to follow .NET
369           naming conventions (as reported by FxCop).
371 2005-11-01  Jonathan Pryor <jonpryor@vt.edu>
373         * UnixDirectoryInfo.cs, UnixDriveInfo.cs, UnixEnvironment.cs, 
374           UnixFileSystemInfo.cs, UnixGroupInfo.cs, UnixProcess.cs, UnixUserInfoc.cs:
375           Obsolete statements now specify in what way the return type will change.
376         * IncludeAttribute.cs: Obsoleted.  It's an error to use it now.
378 2005-11-01  Jonathan Pryor <jonpryor@vt.edu>
380         * FileAccessPattern.cs: Change enumeration names to match Robert Love's more
381           sensible names from his FileAdvise class used in Beagle
382           (UseSoon --> PreLoad, WillNotUse --> FlushCache).
383         * FileHandleOperations.cs: Added; contains AdviseFileAccessPattern()
384           (moved from UnixFile.cs).
385         * UnixDirectory.cs: Obsolete the class; use UnixDirectoryInfo instead.
386         * UnixDirectoryInfo.cs: Add GetCurrentDirectory(), SetCurrentDirectory().
387         * UnixFile.cs: Obsolete the class; use UnixFileInfo, FileHandleOperations,
388           or UnixPipes instead.
389         * UnixFileSystemInfo.cs: Add ToStat() method.
390         * UnixGroup.cs: Obsolete the class; use UnixGroupInfo instead.
391         * UnixGroupInfo.cs: Obsolete & Replace constructor, add GetMemberNames(),
392           GetLocalGroups().
393         * UnixPipes.cs: Added (type moved from UnixFile.cs).
394         * UnixStream.cs: AdviseFileAccessPattern() uses FileHandleOperations now.
395         * UnixSymbolicLinkInfo.cs: Implement TryReadLink() to avoid constant buffer
396           re-sizing.  Stevens states that the file size of the symlink is the number
397           of bytes needed to hold the symlink, so this should be faster.
398         * UnixUser.cs: Obsolete the class; use UnixUserInfo instead.
399         * UnixUserInfo.cs: Obsolete & Replace constructor; add useful static members
400           from UnixUser such as GetLoginName(), GetLocalUsers(), etc.
402 2005-10-27  Jonathan Pryor <jonpryor@vt.edu>
404         * UnixEnvironment.cs: Add RealUser, RealGroup, EffectiveUser, EffectiveGroup
405           properties; [Obsolete] necessary methods and provide replacements.
406         * UnixStream.cs: Add OwnerUser(Id), OwnerGroup(Id) properties; 
407           improve Stat handling.
409 2005-10-26  Jonathan Pryor <jonpryor@vt.edu>
411         * UnixEncoding.cs: Change EscapeByte to 0x0000, as suggested by Michal
412           Moskal.
413         * UnixPath.cs: Remove '\0' from InvalidPathChars, since U+0000 is now used
414           as the path escape character for marshaling purposes.
416 2005-10-26  Jonathan Pryor <jonpryor@vt.edu>
418         * UnixMarshal.cs: Obsolete heap-related methods to have a Heap suffix
419           (AllocHeap, FreeHeap, etc.), and change StringToAlloc() to be
420           StringToHeap().  This creates a stronger name association between related
421           methods.
423 2005-10-26  Jonathan Pryor <jonpryor@vt.edu>
425         * UnixIOException.cs: Add (string) and (string, Exception) constructors to
426           silence FxCop; re-work logic so we lookup the error string at construction
427           time and use this as the message for the base class.
429 2005-10-25  Jonathan Pryor <jonpryor@vt.edu>
431         * Stdlib.cs, Syscall.cs: Filenames need to be marshaled through the 
432           FileNameMarshaler, which will encode/decode filenames with UnixEncoding.
433         * UnixEncoding.cs: Added (copied from
434           ../../corlib/System.Text/UTF8Encoding.cs); a hack to permit handling of 
435           arbitrarily encoded filenames.  It attempts to decode a byte[] array as 
436           UTF-8, and if the decode fails it prefixes each byte with 
437           UnixEncoding.EscapeByte (\uFFFF).
438         * UnixMarshal.cs: Use UnixEncoding as the default encoding, and special-case
439           UnixEncoding to use Stdlib.strlen() for native string lengths.
441 2005-10-21  Jonathan Pryor <jonpryor@vt.edu>
443         * FileAccessPattern.cs: Added
444         * UnixFile.cs, UnixStream.cs: Deprecate all the Advise* methods (lots!)
445           and replace with 6 methods which take a FileAccessPattern enum.
447 2005-10-19  Jonathan Pryor <jonpryor@vt.edu>
449         * FileAccessPermissions.cs, FileSpecialAttributes.cs, FileTypes.cs: Added.
450         * UnixFileSystemInfo.cs, UnixStream.cs: Replace the old Permission property
451           with 4 new properties: Protection (for the Native.FilePermissions value),
452           FileAccessPermissions (for rwxrwxrwx info), FileSpecialAttributes (for
453           set-user-id, set-group-id, sticky), and FileTypes (directory, socket...).
454           The new enumeration types have nicer CLS-compliant names.
456 2005-10-17  Jonathan Pryor <jonpryor@vt.edu>
458         * UnixMarshal.cs: Fix GetIntXxBufferLength to require fewer
459           Marshal.ReadIntXx() calls; Fix PtrToString so that
460           ``"foo" == PtrToString (StringToAlloc("foo",enc),enc)'' is true for
461           "random" encodings.
463 2005-10-17  Jonathan Pryor <jonpryor@vt.edu>
465         * UnixFileSystemInfo.cs: Add OwnerUserId and OwnerGroupId properties.
467 2005-10-17  Jonathan Pryor <jonpryor@vt.edu>
469         * UnixDriveInfo.cs, UnixEnvironment.cs, UnixFile.cs, UnixFileSystemInfo.cs, 
470           UnixGroup.cs, UnixStream.cs, UnixUser.cs: Don't use SetLastError(), since
471           it's use is (1) incorrect, and (2) will be going away with the move to
472           Mono.Unix.Native.Syscall.  Instead use the Native.Syscall.* APIs which 
473           set errno sanely.
475 2005-10-17  Jonathan Pryor <jonpryor@vt.edu>
477         * UnixGroup.cs, UnixGroupInfo.cs, UnixFile.cs, UnixFileSystemInfo.cs,
478           UnixStream.cs, UnixSymbolicLinkInfo.cs, UnixUser.cs, UnixUserInfo.cs:
479           Start migrating uid/gid to long (from uint) for CLS compliance.
480           (Full migration must wait 'til after the next release as this would
481           require changes to existing members.)
482         * UnixEnvironment.cs: Above, and add RealUserId/RealGroupId and
483           EffectiveUserId/EffectiveGroupId.
485 2005-10-14  Jonathan Pryor <jonpryor@vt.edu>
487         * Catalog.cs: Create a constructor and mark it [Obsolete].  It will be made
488           private after the next release.
489         * UnixFile.cs, UnixStream.cs: Deal with Mono.Unix.Native type name changes.
490         * UnixFileSystemInfo.cs: [Obsolete] more members; Deal with Mono.Unix.Native 
491           type name changes.
492         * Syscall.cs: Create maps for PathConf, SysConf, ConfStr again; fpathconf(),
493           pathconf(), and sysconf() should call Native.Syscall since the
494           MonoPosixHelper.so helpers have changed.
496 2005-10-13  Jonathan Pryor <jonpryor@vt.edu>
498         * UnixMarshal.cs: More/better StringToAlloc/PtrToString which take a
499           System.Text.Encoding instance for proper string marshaling.  
500           - PtrToString(string,Encoding) is particularly tricky due to variable
501             length encodings.
502           - Fix StringToAlloc so that it works properly with UTF-16 encodings 
503             (we need a terminating null 16-bit word, not a null byte).
504           - StringToAlloc overload for doing substrings.
506 2005-10-12  Jonathan Pryor <jonpryor@vt.edu>
508         * UnixStream.cs: Check for EROFS and EINVAL in Flush().  Snorp was getting
509           an exception when he created a UnixStream around a socket, because
510           sockets can't be flushed.  It should be acceptable to create a UnixStream
511           around a socket, so don't throw an exception in this scenario.
513 2005-10-06  Jonathan Pryor <jonpryor@vt.edu>
515         * UnixDirectory.cs, UnixDirectoryInfo.cs UnixFile.cs, UnixFileSystemInfo.cs, 
516           UnixGroupInfo.cs, UnixIOException.cs, UnixStream.cs, UnixUserInfo.cs:
517           API Review: Obsolete appropriate members and add appropriate overloads for
518           pending move to Mono.Unix.Native types.
519         * UnixMarshal.cs: API Review; add StringToAlloc().
521 2005-09-26  Jonathan Pryor <jonpryor@vt.edu>
523         * UnixFileSystemInfo.cs: Exists shouldn't use access(2), as (1) Exists isn't
524           virtual, and (2) access(2) errors if you try to access(2) a symlink which
525           points nowhere.  Use (l)stat(2) instead, via GetFileStatus(), as this lets
526           UnixSymbolicLinkInfo behave properly.
527         * UnixSymbolicLinkInfo.cs: The Contents property should return null if the
528           symlink target doesn't exist.
530 2005-09-20  Jonathan Pryor <jonpryor@vt.edu>
532         * Syscall.cs: Add [Map] to AccessMode and MmapProt, as the Mono.Unix.Native
533           replacements go by different names (AccessModes, MmapProts), but we need
534           to continue generating the mapping code for these types (backward compat).
536 2005-09-20  Jonathan Pryor <jonpryor@vt.edu>
538         * CdeclFunction.cs: [Obsolete]d by Mono.Unix.Native.CdeclFunction.
539         * make-map.cs: Remove.
540         * Stdlib.cs: [Obsolete] the types; use the Mono.Unix.Native.* types instead.
541         * StdioFileStream.cs: Add GC.KeepAlive statements to prevent premature GC's
542           (FxCop suggestion).
543         * Syscall.cs: Remove [Map] attribute from all types; [CLSCompliant(false)]
544           work; [Obsolete] all types and suggest using the Mono.Unix.Native.*
545           replacements; remove [IncludeAttribute] -- superseded by
546                 Mono.Unix.Native/Syscall.cs's [HeaderAttribte] for CLS compliance.
547         * UnixConvert.cs: [Obsolete]d by Mono.Unix.Native.NativeConvert.
548         * UnixDirectory.cs, UnixDriveInfo.cs, UnixEnvironment.cs, 
549           UnixGroup.cs, UnixGroupInfo.cs, 
550           UnixSymbolicLinkInfo.cs, UnixUser.cs, UnixUserInfo.cs:
551           Add [CLSCompliant(false)] as necessary.
552         * UnixFile.cs, UnixDirectory.cs, UnixFileInfo.cs, UnixFileSystemInfo.cs: 
553           [CLSCompliant(false)], addition of method overloads for [Obsolete]d types, 
554           warn about changing return types.
555         * UnixProcess.cs, UnixStream.cs: Add [CLSCompliant(false)] as necessary, 
556           and warn about changing property types.
558 2005-09-02  Jonathan Pryor <jonpryor@vt.edu>
560         * Stdlib.cs: Cache delegates passed to Stdlib.signal() so that they survive
561           garbage collections.  Delegates can be removed by calling Stdlib.signal()
562           again with one of the Stdlib.SIG_* values (or the original return value of
563           Stdlib.signal()).
564         * UnixUser.cs, UnixGroup.cs, UnixEnvironment.cs: Clarify "Id" (int) vs. 
565           "Name" (string) differences by always using a Id or Name suffix.
567 2005-07-01  Daniel Drake  <dsd@gentoo.org>
569         * Syscall.cs: The entire extended attribute API now goes through MPH, to
570           be shared between both Linux's and FreeBSD's similar EA implementations.
572 2005-06-29  Miguel de Icaza  <miguel@ximian.com>
574         * StdioFileStream.cs: Only flush if we do not own the handle, as
575         fclose does a flush internally.
577 2005-06-29  Jonathan Pryor <jonpryor@vt.edu>
579         * UnixEnvironment: Add User, Login properties.
580         * Syscall.cs: Add locking around cuserid, crypt, encrypt, getlogin.
582 2005-06-29  Jonathan Pryor <jonpryor@vt.edu>
584         * Syscall.cs: SyslogFacility shouldn't be [Flags] either.  Sigh.
585           Thanks to Vorobiev Maksim for pointing this out.
586         * make-map.cs: Don't generate conversion code for [Obsolete] enum members.
587           This assumes that (1) the enum member's value is invalid, or (2) a
588           corrected member with the same value exists.  This fix allows us to
589           obsolete invalid members (instead of removing them) without screwing up
590           the generated code -- consider LOG_USRE, the mis-spelling of LOG_USER.
591           Since SyslogFacility was (incorrectly) a [Flags] enum, since both LOG_USER
592           and LOG_USRE had the same value, we'd get a EINVAL error trying to convert
593           a valid value, since LOG_USRE would exist, would be checked for, and the
594           check would succeed (since it had the same value as LOG_USER).
595           This change allows us to be slightly more permissive with versioning.
597 2005-06-28  Jonathan Pryor <jonpryor@vt.edu>
599         * Syscall.cs: correct value of LOG_CRON (it shouldn't be identical to
600           LOG_UUCP).  SyslogLevel shouldn't have [Flags].  Move LOG_USER to be
601           before LOG_USRE so that the generated map code doesn't return EINVAL when
602           LOG_USER is specified.
604 2005-06-15  Jonathan Pryor <jonpryor@vt.edu>
606         * Syscall.cs: s/LOG_USRE/LOG_USER/.  Fixes #75274.  
607           Thanks to Martin Honermeyer.
609 2005-06-09  Jonathan Pryor <jonpryor@vt.edu>
611         * make-map.cs: Look for [Obsolete] members, and mark the UnixConvert
612           conversion functions with the same [Obsolete] message.  This should permit
613           more graceful deprecation of enumerations in the future (rather than just
614           API breaks).
616 2005-06-08  Jonathan Pryor <jonpryor@vt.edu>
618         * Syscall.cs: Add execvp(2).  (This should have been added with the other
619           exec(2) additions...).
621 2005-06-08  Jonathan Pryor <jonpryor@vt.edu>
623         * Syscall.cs: Update comment with correct exception type.
624         * UnixConvert.cs: Rename ToFilePermissions(string) to
625           FromOctalPermissionString; Add ToOctalPermissionString,
626           FromUnixPermissionString, ToUnixPermissionString.
627         * UnixMarshal.cs: Remove ErrorMarshal.HaveStrerror_r and
628           UnixMarshal.IsErrorDescriptionThreadSafe.  strerror(3) is now thread-safe
629           (from managed code, at least).  Update comment.
631 2005-06-07  Jonathan Pryor <jonpryor@vt.edu>
633         * UnixFileSystemInfo.cs: Don't use lstat(2), use stat(2).  This fits with
634           expectations better -- if you create a UnixFileInfo() on a symlink, you
635           want to get the target's information, not the symlink's info.  Add
636           GetFileStatus so UnixSymbolicLinkInfo can override this behavior.
637         * UnixSymbolicLinkInfo.cs: Implement GetFileStatus() (which calls lstat(2)).
639 2005-06-07  Jonathan Pryor <jonpryor@vt.edu>
641         * Syscall.cs: Document naming conventions.
643 2005-06-05  Jonathan Pryor <jonpryor@vt.edu>
645         * make-map.cs: Change automatic "ifdef HAVE_<header>" support prefix to
646           "ah:" from ">".  I hadn't known about ">", and "ah:" is (somewhat) more
647           obvious.
648         * Syscall.cs: Change IncludeAttribute to put all headers/defines one/line.
649           It's easier to read this way.  Add "ah:sys/xattr.h" to the headers.
651 2005-06-03  Jonathan Pryor <jonpryor@vt.edu>
653         * Stdlib.cs: Add sanity checking to snprintf(3) to avoid buffer overflows.
655 2005-06-02  Jonathan Pryor <jonpryor@vt.edu>
657         * StdioFileStream.cs: Remove FilePosition property & replace with
658           SaveFilePosition/RestoreFilePosition methods.  Since FilePosition has a
659           finalizer, it's not right to have implicitly created instances.
660         * Stdlib.cs: 
661           - FilePosition: GC.SuppressFinalize() should be last in Dispose() 
662             (following .NET guidelines).
663           - Syscall: Add locking around functions most likely to be thread unsafe.
664             This should provide some level of thread-safety to managed code.
665         * Syscall.cs: Add locking around functions most likely to be thread unsafe;
666           add mkstemp(3) export.
667         * UnixEnvironment.cs: GetUserShells should be atomic (from managed code).
668         * UnixGroup.cs: GetLocalGroups should be atomic (from managed code).
669         * UnixGroupInfo.cs: Add ToGroup() method to retrieve underlying Group info.
670         * UnixUser.cs: GetLocalUsers should be atomic (from managed code).
671         * UnixUserInfo.cs: Add ToPasswd () method to retrieve underlying Passwd info.
672         * UnixDriveInfo.cs: GetDrives should be atomic (from managed code).
674 2005-05-31  Jonathan Pryor <jonpryor@vt.edu>
676         * Stdlib.cs: Add comment for atexit(3) so I don't try to add it.
677         * Syscall.cs: Add fcntl(2) overload which takes DirectoryNotifyFlags (so
678           that *something* accepts a DirectoryNotifyFlags); Fix IncludeAttribute
679                 header files (">sys/poll.h" doesn't exist); 
680           Add additional <sys/mman.h> functions mmap, munmap, msync, mlock, munlock,
681           mlockall, munlockall, mremap, mincore, remap_file_pages.
682         * UnixConvert.cs: Add conversion functions for MmapFlags, MmapProt, MsyncFlags,
683           MlockallFlags, MremapFlags.
685 2005-05-31  Jonathan Pryor <jonpryor@vt.edu>
687         * Syscall.cs, UnixConvert.cs: Rename LockFlags to LockfCommand.  This is a more 
688           consistent naming, and it's more correct (they weren't flags in the first place).
690 2005-05-18  Jonathan Pryor <jonpryor@vt.edu>
692         * Stdlib.cs: Correct Mono_Posix_Stdlib_InvokeSignalHandler export.
694 2005-05-18  Jonathan Pryor <jonpryor@vt.edu>
696         * make-map.cs: Process the Mono.Posix namespace as well as Mono.Unix; add
697           mapping for Boolean => int for native type conversion.
699 2005-05-18  Jonathan Pryor <jonpryor@vt.edu>
701         * make-map.cs: Add a MphPrototypeFileGenerator, which looks for DllImport
702           methods across all types and generates a C header file declaration for
703           those methods.  This allows us to ensure consistency between
704           Mono.Posix.dll and MonoPosixHelper.so.  Rename WrapperFileGenerator to
705                 ConvertFileGenerator (it generates UnixConvert).
706         * MapAttribute.cs, IncludeAttribute.cs: Make these internal -- there's no
707           reason for external users to even know these exist.
708         * StdioFileStream.cs: Move GC.SuppressFinalize call to be last Dispose()
709           call.  This follows current design guidelines, and allows an exception to
710           be thrown from Dispose() without un-registering the finalizer.
711         * Syscall.cs: Change method declarations to match MonoPosixHelper, etc.
712            - posix_fallocate(P) takes a size_t
713            - mis-spelled settimeofday(2), sethostname(2)
714            - exec(2) can be public; it's safe to call
715            - change lseek(2) so int's are passed to MonoPosixHelper.so, not shorts
716            - We can't allow two incompatible prototypes to exist (since C allows
717              only one prototype, and we're cross-checking prototypes now).  Change
718              utime(2) so only one prototype is needed.
719         * UnixMarshal.cs: ErrorMarshal.ErrorTranslator and ErrorMarshal.Translate
720           shouldn't be public; make them internal.
721         * UnixStream.cs: Remove `unsafe` code block when a "safe" alternative works;
722           Close() should also call GC.SuppressFinalize.
724 2005-05-12  Jonathan Pryor <jonpryor@vt.edu>
726         * Syscall.cs: The Statvfs structure should contain a MountFlags enumeration,
727           not a ulong (we can "safely" do this since POSIX defines some values for
728           f_flag, so we should be kind and expose them).
729         * UnixConvert.cs: Add MountFlags conversion functions.
731 2005-05-02  Joe Shaw  <joeshaw@novell.com>
733         * UnixListener.cs (Init): Remove the call to Cleanup() and the
734         method itself, which was not supposed to be here.  We try to
735         connect to the socket if it exists instead of deleting it
736         undconditionally.
738 2005-04-30  Ben Maurer  <bmaurer@ximian.com>
740         * Stdlib.cs: Comment out usage of `UnmanagedFunctionPointer'. It
741         isn't supported in the runtime -- it throws an assert -- so better
742         not to use it at all for now.
744 2005-04-29  Jonathan Pryor <jonpryor@vt.edu>
746         * UnixConvert.cs: Fix time_t -> DateTime conversions.  time_t should be
747           assumed to be in the local time zone, so don't mess with UTC shifts.
748           This allows Mono.Unix to produce sane output (e.g. identical to ls(1) or
749           stat(1), instead of several hours different).
751 2005-04-29  Jonathan Pryor <jonpryor@vt.edu>
753         * Stdlib.cs: Make FilePosition slightly more useful by providing a
754           ToString() override which dumps the fpos_t structure contents into a 
755           hex string.  Add Equals(), GetHashCode(), operator==, and operator!=
756           so FilePosition behaves like a value type.
758 2005-04-21 Gonzalo Paniagua Javier <gonzalo@ximian.com>
760         * UnixClient.cs:
761         * UnixListener.cs: TcpListener/TcpClient clones from Jow Shaw.
763 2005-04-21 Gonzalo Paniagua Javier <gonzalo@ximian.com>
765         * Mono.Posix.dll.sources: added UnixListener and UnixClient from Joe
766         Shaw.
768 2005-04-21 Gonzalo Paniagua Javier <gonzalo@ximian.com>
770         * UnixEndPoint.cs: fix from Mono.Posix.
772 2005-04-20  Jonathan Pryor <jonpryor@vt.edu>
774         * Syscall.cs: Make all fork(2) and exec(2) functions `private`.  It
775           currently isn't safe to call these under *any* circumstances.  See also
776           68141, and this pertinent quote from Butenhof's 
777           "Programming with POSIX Threads", p197, s6.1:
778           
779               "When a threaded process calls fork to create a child process,
780               Pthreads specifies that only the thread calling fork exists in the
781               child. ... Pthreads does not 'terminate' the other threads in a forked
782               process...They simply cease to exist.  ... This is not a problem if
783               the child process is about to call exec to run a new program, but if
784               you use fork to clone a threaded program, beware that you may lose
785               access to memory, especially heap memory stored only as
786               thread-specific data values."
787           
788           Since P/Invoke currently requires using thread local storage, once you
789           fork(2) you won't be able to invoke exec(2) from managed code (since that
790           would require a P/Invoke transition to call exec(2), which would require
791           TLS, which doesn't exist in the new process).
792          
793           This can only be fixed by removing the TLS dependency on P/Invoke, which
794           isn't a priority (and may not be possible).
795          
796           The workaround is to create a C function which does your fork(2)/exec(2)
797           (and any other functions such as daemon(3)) on your behalf, and P/Invoke
798           to call this C function.
800 2005-04-18  Jonathan Pryor <jonpryor@vt.edu>
802         * Syscall.cs: Update comment specifying which functions belong in Syscall.
803         * UnixConvert.cs: Add XattrFlags conversion functions.
804         * UnixMarshal.cs: Remove warning about self-assignment.
806 2005-04-16  Daniel Drake <dsd@gentoo.org>
808         * Syscall.cs: Add bindings for extended attribute manipulation
810 2005-04-05  Miguel de Icaza  <miguel@novell.com>
812         * Syscall.cs: Set entry point for sys_syslog to be syslog.
813         Include the syslog.h header in the generated map so that we
814         actually do the mapping.
816 2005-03-28  Jonathan Pryor <jonpryor@vt.edu>
818         * UnixConvert.cs: Add ToFopenMode() methods, which convert FileMode/FileAccess
819           into an fopen(3) mode string.  ToOpenFlags() should throw
820           ArgumentOutOfRangeException for argument violations.
821         * StdioFileStream.cs: Add constructor overloads accepting filename and
822           FileMode/FileAccess overloads; Compatibility fixes with regression tests;
823           remove IDisposable implementation since System.IO.Stream already
824           implements it (which calls Close() for us).
826 2005-03-17  Jonathan Pryor <jonpryor@vt.edu>
828         * Stdlib.cs: Move Errno-related functionality into Stdlib from Syscall,
829           since (1) errno is part of C89, and (2) StdioFileStream will need it, and
830           StdioFileStream shouldn't use Syscall.  Add [UnmanagedFunctionPointer]
831                 attribute to SignalHandler for .NET 2.0 (since signal handlers use C
832                 calling convention, not Stdcall).
833         * Syscall.cs: Move Errno-related functionality into Stdlib.
834         * UnixMarshal.cs: Use ERANGE not EPERM when figuring out appropriate
835           translator, since ERANGE is part of C99 and EPERM isn't.  Use Stdlib
836           instead of Syscall for Errno-related functionality.
838 2005-02-02  Jonathan Pryor <jonpryor@vt.edu>
840         * UnixFile.cs: Cope with changes in UnixStream.
841         * UnixStream.cs: Change FileDescriptor property to Handle for consistency.
842         * StdioFileStream.cs: Change FileStream property to Handle for consistency.
844 2005-02-02  Jonathan Pryor <jonpryor@vt.edu>
846         * Syscall.cs: Remove public sys_ methods.  Some were public by mistake, and
847           others so that users could manually marshal strings if desired.  Manually
848           marshaling strings shouldn't be necessary, though, so remove them too.
850 2005-02-02  Jonathan Pryor <jonpryor@vt.edu>
852         * StdioFileStream.cs: Fix Length property to actually return the size of the
853           file, not the # of bytes from the current position to EOF.  Oops.
855 2005-01-31  Jonathan Pryor <jonpryor@vt.edu>
857         * Stdlib.cs: Import "msvcrt", not "libc".  These members are part of the
858           ANSI C standard, and thus should be present on Windows via msvcrt.dll
859           (except snprintf, until they catch up to C99).  Change the calling
860           convention of all functions to Cdecl, as the .NET default is Stdcall.
861           Changing the calling convention isn't needed in Syscall, as it can only be
862           run on Unix platforms anyway, where the default is Cdecl.
863         * Syscall.cs: Add LIBC member that points to the real "libc"; we can't use
864           the imported definition from Stdlib as "msvcrt" doesn't exist on Unix.
866 2005-01-29  Jonathan Pryor <jonpryor@vt.edu>
868         * Stdlib.cs: sys_* functions shouldn't be public.
870 2005-01-13  Jonathan Pryor <jonpryor@vt.edu>
872         * make-map.cs: libMonoPosixHelper exports Mono_Posix prefixes, not Mono_Unix
873           prefixes, so change the type and namespace to generate compatible code.
874         * Syscall.cs: Change OpenFlags values so they match the Linux values.
876 2005-01-13  Jonathan Pryor <jonpryor@vt.edu>
878         * Stdlib.cs: Use Stdlib.LIBC instead of "libc".
879         * StdioFileStream.cs: Add FilePosition property (not that I expect anyone to
880           use it) and Rewind() method.
882 2005-01-05  Jonathan Pryor <jonpryor@vt.edu>
884         * StdioFileStream.cs: Added; System.IO.Stream wrapper for C FILE struct.
885         * Stdlib.cs: Correct visibility of ftell().
887 2005-01-05  Jonathan Pryor <jonpryor@vt.edu>
889         * Stdlib.cs: Re-order declarations to match the order used in the 
890           C99 Standard Annex B; Complete <stdio.h> exports (except for those not
891           worth supporting); Add non-"unsafe" versions of fread(3), fwrite(3) and
892           add some rudimentary buffer-overflow checking; Add <stdlib.h> exports such
893           as getenv(3), exit(3), rand(3), EXIT_SUCCESS, RAND_MAX, etc.
895 2005-01-03  Jonathan Pryor <jonpryor@vt.edu>
897         * Syscall.cs: Update endfsent() and setfsent() declarations, as these must
898           now be implemented in MonoPosixHelper.
900 2005-01-01  Jonathan Pryor <jonpryor@vt.edu>
902         * Stdlib.cs, Syscall.cs: Minimize duplicate declarations of
903           "MonoPosixHelper" for use in DllImport statements.
905 2005-01-01  Jonathan Pryor <jonpryor@vt.edu>
907         * Stdlib.cs: Don't use C# v2 features; fixes build under CSC.EXE.
909 2004-12-30  Jonathan Pryor <jonpryor@vt.edu>
911         * Stdlib.cs: On miguel's suggestion, rename Sighandler_t to SignalHandler.
913 2004-12-30  Jonathan Pryor <jonpryor@vt.edu>
915         * Stdlib.cs: Implement all C89 <stdio.h> functions except for the scanf(3)
916           family.  These are too dangerous to expose.
918 2004-12-30  Jonathan Pryor <jonpryor@vt.edu>
920         * CdeclFunctions.cs: Remove warning about unused variable.
921         * Stdlib.cs: Make signal(2) sane and (hopefully) complete.
922         * Syscall.cs: Fix cuserid Obsolete message to reference correct class name.
923         * UnixProcess.cs: Remove warning about unused variable.
924         * UnixMarshal.cs: Remove warnings about unused variables.
926 2004-12-29  Jonathan Pryor <jonpryor@vt.edu>
928         * UnixPath.cs: Add ReadSymbolicLink(), which takes an intelligent approach
929           to reading symlinks (since their contents may be any size, we grow the
930           buffer dynamically to fit them all, instead of assuming a maximum size).
931         * UnixSymbolicLinkInfo.cs: Remove MaxContentsSize.
933 2004-12-29  Jonathan Pryor <jonpryor@vt.edu>
935         * UnixPath.cs: Add check for when symlink points to a full path name.
937 2004-12-29  Jonathan Pryor <jonpryor@vt.edu>
939         * Syscall.cs: Fix Object.Equals implementations.
940         * UnixPath.cs: New & improved, with Testing!  GetRealPath() is changed so
941           that it doesn't walk the entire path looking for symlinks, it just reads 
942           the leaf.  GetCompletRealPath() walks the entire path resolving symlinks.
943           GetCanonicalPath() added, which "cleans up" a path (removing extraneous
944           "." and ".." entries).
945         * UnixSymbolicLinkInfo.cs: Rename ContentsLength -> MaxContentsSize.
947 2004-12-28  Jonathan Pryor <jonpryor@vt.edu>
949         * UnixFileSystemInfo.cs: Add a link(2) wrapper, CreateLink().  Strictly
950           speaking it's only "safe" to do this on files, but an exception will be 
951           returned if the user tries to hard link directories (because of EPERM), 
952           unless the user is root, in which case it should be allowed anyway...
954 2004-12-28  Jonathan Pryor <jonpryor@vt.edu>
956         * CdeclFunctions.cs: Correct the comments for AMD64
957         * UnixDirectoryInfo.cs: override Name; add Parent & Root properties; 
958           Correct Path usage (s/Path/FullPath/g).
959         * UnixDriveInfo.cs: Added.  Based on .NET 2.0 System.IO.DriveInfo docs,
960           provides statvfs(2) and getfsfile(3) information about a mounted volume.
961           GetDrives() wraps getfsent(3), thus parsing /etc/fstab.
962         * UnixFile.cs: Use UnixConver.ToOpenFlags, deleting the local version.
963         * UnixFileInfo.cs: Use UnixConver.ToOpenFlags, deleting the local version;
964           override Name; add DirectoryName and Directory properties; 
965         * UnixFileSystemInfo.cs: Make more .NET-like, using FullPath and
966           OriginalPath protected members, abstract Name property; Add
967           CreateSymbolicLink; Remove ReadLink (it's now 
968           UnixSymbolicLinkInfo.Contents); Use lstat(2) for Create(string), so we
969           properly detect Symbolic Links.
970         * UnixPath.cs: Added; Path manipulation utility functions.
971         * UnixSymbolicLinkInfo.cs: 
972           - Seal the class; 
973           - override new abstract member Name; 
974           - rename ReadLink to ContentsPath (and Contents) properties 
975             (why "Contents"?  Because readlink(2) says "readlink places the 
976             contents of the symbolic link in the buffer...")
977           - Add CreateSymbolicLinkTo(), which creates a symlink to the specified
978             "normal" file
980 2004-12-28  Jonathan Pryor <jonpryor@vt.edu>
982         * Stdlib.cs: Add syslog(3) to XPrintfFunctions; Add additional printf(3) 
983           and fprintf(3) overload which properly escape the format string 
984           (by using "%s" as the format for the user-supplied message).
985         * Syscall.cs: Add #regions for enummerations, structures, classes; Wrap
986           syslog(3) and related enumerations; fix operator!= on Dirent, Group; 
987           wrap {f}statvfs(2); wrap <fstab.h> entries (getfsent(3), etc.).
988         * UnixConvert.cs: Add Syslog-releated enumeration translation functions;
989           Move ToOpenFlags here from UnixFile and UnixFileInfo.
990         * UnixMarshal.cs: Missing P/Invoke methods throw
991           EntryPointNotFoundException, not MissingMethodException; add
992           EscapeFormatString, which escapes printf-style format strings so that they
993           can be safely handed off to native code (avoiding stack overflow, etc);
994           make CreateExceptionForError internal.
996 2004-12-15  Jonathan Pryor <jonpryor@vt.edu>
998         * Stdlib.cs: Add more <stdio.h> wrappers, such as fread(3) and fwrite(3).
999           These will be useful in implementing System.IO.Stream subclass for
1000           reading/writing to a FILE*.  Fix a typo in the realloc(3) DllImport.
1001         * Syscall.cs: Fix the sys_kill and sys_crypt declarations.
1002         * CdeclFunction.cs: Document calling convention problems on AMD64.
1004 2004-11-18  Jonathan Pryor <jonpryor@vt.edu>
1006         * CdeclFunction.cs: Added.
1007         * Stdlib.cs: Re-add printf(3) and fprintf(3).  They may not be portable (the
1008           jury is still out on that; the AMD64 SysV ABI looks like it should be
1009           portable to AMD64 to my eyes), but they will work on *some* platforms, so
1010           we should permit it.  The new implementation takes a page out of
1011           cocoa-sharp: use System.Reflection.Emit to generate a P/Invoke method at
1012           runtime to invoke printf(3) or fprintf(3).  This way, we can export a
1013           params signature to C# code, permitting natural usage such as:
1014               Stdlib.printf ("Hello, %s world! (%i)\n", "silly", 42);
1015         * Syscall.cs: Mark which headers are complete, which functions still need
1016           wrapping (for headers which have anything done to them), add #region
1017           blocks for each header;
1018           export mkfifo(3), fexecve(), getppid(2), setlogin(); fix sleep(3) export.
1019         * UnixEnvironment.cs: Export a friendly getppid(2) wrapper.
1020           GetParentProcessId isn't in UnixProcess as there's no way (that I know of)
1021           to get the Parent's Parent, so it can't be a class member, and exposing it
1022           as a static member of UnixProcess doesn't make sense to me, as it isn't
1023           general.  Added GetUserShells().
1024         * UnixProcess.cs: Change constructor to internal, so it can be used from
1025           UnixEnvironment.
1027 2004-11-16  Jonathan Pryor <jonpryor@vt.edu>
1029         * Stdlib.cs: Remove printf(3) and fprintf(3).  These are vararg/CDECL 
1030           functions, and it's not portable to call them in this manner.
1031           (It's not portable because some architectures, such as AMD64, use a
1032           "cookie" as part of the vararg calling sequence to help reduce buffer
1033           overflow exploits.  Trying to call vararg functions as if they were an
1034           overloaded function will not properly set this hardware cookie, resulting
1035           in a hardware exception.  Talk to lupus for more information.)
1037 2004-11-16  Jonathan Pryor <jonpryor@vt.edu>
1039         * Syscall.cs, UnixConvert.cs: Remove mount- and umount-related
1040           functionality.  Mount/umount is inherently non-portable (see the C code
1041           for mount/umount), and trying to provide a consistent interface is
1042           impossible.  If you need mount/umount support, use the command-line
1043           programs mount(1) and umount(1).
1045 2004-11-16  Jonathan Pryor <jonpryor@vt.edu>
1047         + Lots o' Renames, as the namespace changed.
1048         * PosixConvert.cs: Moved to UnixConvert.cs:
1049         * PosixDirectory.cs: Moved to UnixDirectory.cs:
1050         * PosixEnvironment.cs: Moved to UnixEnvironment.cs:
1051         * PosixDirectoryInfo.cs: Moved to UnixDirectoryInfo.cs:
1052         * PosixFile.cs: Moved to UnixFile.cs:
1053         * PosixFileInfo.cs: Moved to UnixFileInfo.cs:
1054         * PosixFileSystemInfo.cs: Moved to UnixFileSystemInfo.cs:
1055         * PosixGroup.cs: Moved to UnixGroup.cs:
1056         * PosixGroupInfo.cs: Moved to UnixGroupInfo.cs:
1057         * PosixIOException.cs: Moved to UnixIOException.cs:
1058         * PosixMarshal.cs: Moved to UnixMarshal.cs:
1059         * PosixProcess.cs: Moved to UnixProcess.cs:
1060         * PosixStream.cs: Moved to UnixStream.cs:
1061         * PosixSymbolicLinkInfo.cs: Moved to UnixSymbolicLinkInfo.cs:
1062         * PosixUser.cs: Moved to UnixUser.cs:
1063         * PosixUserInfo.cs: Moved to UnixUserInfo.cs:
1064         * Catalog.cs, IncludeAttribute.cs, MapAttribute.cs, PeerCred.cs, Stdlib.cs,
1065           Syscall.cs, UnixConvert.cs, UnixDirectory.cs, UnixDirectoryInfo.cs,
1066           UnixEndPoint.cs, UnixEnvironment.cs, UnixFile.cs, UnixFileInfo.cs,
1067           UnixFileSystemInfo.cs, UnixGroup.cs, UnixGroupInfo.cs, UnixIOException.cs,
1068           UnixMarshal.cs, UnixProcess.cs, UnixStream.cs, UnixSymbolicLinkInfo.cs,
1069           UnixUser.cs, UnixUserInfo.cs: Deal with renamed classes/members.
1071 2004-11-15  Jonathan Pryor <jonpryor@vt.edu>
1073         * PosixUserInfo.cs: Make the PosixUserInfo(Passwd) constructor public;
1074           override Object.GetHashCode and Object.Equals.
1075         * PosixGroupInfo.cs: Make the PosixGroupInfo(Group) constructor public;
1076           override Object.GetHashCode and Object.Equals.
1077         * PosixIOException.cs: Use PosixMarshal.GetErrorDescription instead of
1078           calling Syscall.strerror_r directly
1079         * PosixMarshal.cs: Add GetErrorDescription.  Strerror_r() isn't portable, so
1080           GetErrorDescription() first tries strerror_r(), and if it fails falls back
1081           to strerror(3).
1082         * Syscall.cs: 
1083           - Seal the Dirent class.  It has no virtual members, so there's no point 
1084       in it being non-sealed.  Override Object.GetHashCode and Object.Equals.
1085           - Seal the Group class.  It has no virtual members, so there's no point 
1086       in it being non-sealed.  Override Object.GetHashCode and Object.Equals.
1087             Provide operator== and operator!=.
1088           - Seal the Passwd class.  It has no virtual members, so there's no point 
1089       in it being non-sealed.  Override Object.GetHashCode and Object.Equals.
1090             Provide operator== and operator!=.
1091           - Remove strerror_r() convenience overload.  This is now
1092             PosixMarshal.GetErrorDescription().
1094 2004-11-12  Jonathan Pryor <jonpryor@vt.edu>
1096         * Syscall.cs: Export time-related functions (gettimeofday, settimeofday,
1097           utime, utimes), mknod.
1099 2004-11-07  Atsushi Enomoto  <atsushi@ximian.com>
1101         * PosixEnvironment.cs : csc build fix. see bug #69195.
1102         * PosixStream.cs : csc build fix. see bug #69196.
1104 2004-11-05  Jonathan Pryor  <jonpryor@vt.edu>
1106         * PosixConvert.cs: New file; conversion functions for Mono.Posix types.
1107         * PosixDirectory.cs: New file; Friendly wrapper over directory information.
1108         * PosixDirectoryInfo.cs: New file; Friendly wrapper over directory information.
1109         * PosixEnvironment.cs: New file; Friendly wrapper over environment information.
1110         * PosixFile.cs: New file; Friendly wrapper over file information.
1111         * PosixFileInfo.cs: New file; Friendly wrapper over file information.
1112         * PosixFileSystemInfo.cs: New file; Friendly wrapper over `stat'.
1113         * PosixGroup.cs: New file; User Group-related functionality
1114         * PosixGroupInfo.cs: New file; User Group-related functionality
1115         * PosixIOException.cs: New file; Exception for POSIX-generated exceptions.
1116         * PosixMarshal.cs: New file; utility functions for marshaling, etc.
1117         * PosixProcess.cs: New file; Friendly wrapper over process information.
1118         * PosixStream.cs: New file; Friendly wrapper over file descriptors.
1119         * PosixSymbolicLinkInfo.cs: New file; Friendly wrapper over symbolic links.
1120         * PosixUser.cs: New file; Friendly wrapper over user information.
1121         * PosixUserInfo.cs: New file; Friendly wrapper over user information.
1122         * Stdlib.cs: New file; C standard library exports.
1123         * Syscall.cs: Effective re-write.  
1124           - Organize exports by header file
1125           - add additional enumerations (Error for the E* error values, etc.)
1126           - always explicitly specify enumeration underlying type
1127           - Use a new wrapping infrastructure so that ABI-stable types are exported
1128                 - For example, size_t is exported as ulong, not IntPtr.
1129           - Wrap more functions, and wrap them better (such as getpwnam).
1130           - This release is NOT backward compatible.  Many names are the same, and
1131             hopefully they're still compatible, but no effort was made to maintain
1132             compatibility.  For example, FileMode was removed and replaced with
1133             FilePermissions, to avoid a name conflict with System.IO.FileMode.
1134                 - Change umount() to use MonoPosixHelper: portability fix for Mac OS X.
1135         * make-map.cs: Another effective re-write, to clean up the code, produce
1136           better output, and produce more output.  For example, most of
1137           PosixConvert can be auto-generated, so it is (modulo version delays and
1138           bootstrap issues).  `map.c' is now conditional on all macros, and has
1139           error checking for invalid/unsupported values.
1141 2004-09-18  Jackson Harper  <jackson@ximian.com>
1143         * Syscall.cs: Add support for poll ().
1145 2004-09-18  Jackson Harper  <jackson@ximian.com>
1147         * make-map.cs: Use field value not name for #defines.
1148                 
1149 2004-09-14  Loren Bandiera <lorenb@mmgsecurity.com>
1151         * Syscall.cs: Added method for getpwnam which uses Passwd
1152         struct.
1153         * macros.c: Helper function for getpwnam
1154         (In committing, Josh Tauberer also added getpwuid.)
1156 2004-07-09  Dick Porter  <dick@ximian.com>
1158         * PeerCred.cs: Get the unix socket peer credentials.
1160 2004-05-26  Miguel de Icaza  <miguel@ximian.com>
1162         * Syscall.cs: Do not let the runtime handle strings, as we do not
1163         own those strings, we must transform the char * into a string
1164         ourselves. 
1166 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
1168         * Syscall.cs: Add symlink
1170 2004-04-19  Miguel de Icaza  <miguel@ximian.com>
1172         * Syscall.cs: Use hex values for FileMode, since C# does not have
1173         an octal integer mode.
1175 2004-03-30  Joshua Tauberer <tauberer@for.net>
1177         * Added readlink, strerror, opendir, readdir, closedir
1178         * Added Mono.Posix.Stat.UnixToDateTime(long unixtime) --> DateTime
1180 2004-03-11  Joshua Tauberer <tauberer@for.net>
1182         * Syscall.cs: Removed argument to getgid that shouldn't be there.
1183                 Added getusername, getgroupname which wrap getpwuid, getgrgid
1184                 without dealing with pointers to structures.
1185                 Removed duplicate FileMode enum nested in Syscall class.
1186                 Added stat and lstat, which use StatMode enumeration
1187                 (like FileMode but nicer and complete) and Stat struct.
1188         * macros.c: Helper functions for getpwuid, getgrgid, stat, lstat.
1190 2004-01-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1192         * Syscall.cs: moved the assembly attribute to a proper place
1193         and added 'signal.h'
1194         * make-map.cs: use reflection to invoke the properties, as it
1195         fails under MS runtime.
1196         
1198 2004-01-05  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1200         * Syscall.cs: moved assembly attribute and added unsafe block to fix
1201         the build on windows.
1203 2003-11-11  Wojciech Polak <polak@gnu.org
1205         * Syscall.cs: Applied patch from Wojciech Polak <polak@gnu.org> to
1206         support IsAtty.
1208 2003-05-16  Dick Porter  <dick@ximian.com>
1210         * UnixEndPoint.cs: New property to get and set the filename, like
1211         the IPEndPoint has for the IP address.  Also implement ToString().
1213 Tue Apr 29 16:53:56 CEST 2003 Paolo Molaro <lupus@ximian.com>
1215         * Syscall.cs: remove the unsafe mess.
1217 2003-02-05  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1219         * Check in.
1220         * UnixEndPoint.cs: first file.