d1b975c6ce56844a9ea27df526710f7172907bc8
[mono.git] / mcs / class / Mono.Posix / Mono.Unix / ChangeLog
1 2010-04-15  Jonathan Pryor  <jpryor@novell.com>
2
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.
6
7 2009-03-23  Jonathan Pryor  <jpryor@novell.com>
8
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.
14
15 2009-02-20  Jonathan Pryor  <jpryor@novell.com>
16
17         * UnixSignal.cs: Add a pipecnt member to UnixSignal.SignalIinfo.
18           Patch thanks to tim.jenks@realtimeworlds.com.
19
20 2009-02-09  Jonathan Pryor  <jpryor@novell.com>
21
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.
25
26 2009-01-08  Rodrigo Kumpera  <rkumpera@novell.com>
27
28         * UnixSignal.cs: Check if realtime signal install failed with 
29         EADDRINUSE due to the signal been used by outside of Mono.Posix.
30
31 2008-12-19  Jonathan Pryor  <jpryor@novell.com>
32
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.
36
37 2008-11-04  Andrés G. Aragoneses  <aaragoneses@novell.com>
38
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>.
42
43 2008-11-03  Miguel de Icaza  <miguel@novell.com>
44
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. 
48
49 2008-02-11  Jonathan Pryor  <jpryor@novell.com>
50
51         * UnixSignal.cs: Improve argument checking to match docs.
52
53 2008-02-08  Jonathan Pryor  <jpryor@novell.com>
54
55         * UnixSignal.cs: UnixSignal.WaitAny() should have the same return type as
56           WaitHandle.WaitAny().  Oops.
57
58 2008-02-08  Jonathan Pryor  <jpryor@novell.com>
59
60         * UnixSignal.cs: Modification of Info->count should be thread safe.
61
62 2008-01-28  Jonathan Pryor  <jpryor@novell.com>
63
64         * UnixSignal.cs: Added; Polling and blocking based Unix signal mechanism.
65           http://lists.ximian.com/pipermail/mono-devel-list/2008-January/026501.html
66
67 2008-01-22  Sebastien Pouliot  <sebastien@ximian.com>
68
69         * UnixPipes.cs: Fix Equals to avoid NRE (and return false if object 
70         is null). Found using Gendarme.
71
72 2007-12-17  Jonathan Pryor  <jpryor@novell.com>
73
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.
77
78 2007-12-17  Jonathan Pryor  <jonpryor@vt.edu>
79
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 "".
90
91 2007-09-13  Jonathan Pryor  <jonpryor@vt.edu>
92
93         * UnixStream.cs: Don't read/write if the buffer has no data.  Fixes #82836.
94
95 2006-10-24  Jonathan Pryor  <jonpryor@vt.edu>
96
97         * MapAttribute.cs: Moved to ../Mono.Unix.Native/MapAttribute.cs.
98
99 2006-08-21  Jonathan Pryor  <jonpryor@vt.edu>
100
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.
105
106 2006-08-16  Alp Toker  <alp@atoker.com>
107
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.
112
113 2006-07-02  Jonathan Pryor  <jonpryor@vt.edu>
114
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. :-/
118
119 2006-07-02  Jonathan Pryor  <jonpryor@vt.edu>
120
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.
124
125 2006-04-21  Jonathan Pryor  <jonpryor@vt.edu>
126
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).
132
133 2006-03-09 Gonzalo Paniagua Javier <gonzalo@ximian.com>
134
135         * UnixEndPoint.cs: added GetHashCode/Equals.
136
137 2006-03-06  Jonathan Pryor  <jonpryor@vt.edu>
138
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.
148
149 2006-02-23  Jonathan Pryor  <jonpryor@vt.edu>
150
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.
166
167 2006-02-18  Alp Toker  <alp@atoker.com>
168
169         * UnixEndPoint.cs: Avoid truncation of last two bytes of SocketAddress
170         string
171
172 2006-01-26  Jonathan Pryor  <jonpryor@vt.edu>
173
174         * UnixMarshal.cs: Check for null arguments in PtrToString() and
175           PtrToStringArray().
176
177 2006-01-24  Jonathan Pryor  <jonpryor@vt.edu>
178
179         * UnixMarshal.cs (StringToHeap): Return IntPtr.Zero if `s' is null.
180
181 2006-01-24  Jonathan Pryor  <jonpryor@vt.edu>
182
183         * UnixMarshal.cs (StringToHeap): Check for null arguments.
184
185 2006-01-20  Jonathan Pryor  <jonpryor@vt.edu>
186
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.
194
195 2006-01-15  Jonathan Pryor  <jonpryor@vt.edu>
196
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.
202
203 2006-01-14  Jonathan Pryor  <jonpryor@vt.edu>
204
205         * UnixGroupInfo.cs: ToGroup() should clone the underlying Native.Group, so
206           that it doesn't get changed from underneath it.
207
208 2006-01-13  Jonathan Pryor  <jonpryor@vt.edu>
209
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).
213
214 2006-01-12  Jonathan Pryor  <jonpryor@vt.edu>
215
216         * UnixPath.cs: Add ReadLink() and TryReadLink() methods.
217
218 2006-01-12  Miguel de Icaza  <miguel@novell.com>
219
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. 
223
224 2006-01-10  Jonathan Pryor <jonpryor@vt.edu>
225
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.
232
233 2006-01-09  Jonathan Pryor <jonpryor@vt.edu>
234
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.
241
242 2006-01-07  Jonathan Pryor <jonpryor@vt.edu>
243
244         * UnixMarshal.cs: *Actually* put things in alphabetical order (like the
245           comment says).  I can speak english, really I can.
246
247 2006-01-06  Jonathan Pryor <jonpryor@vt.edu>
248
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).
252
253 2006-01-03  Jonathan Pryor <jonpryor@vt.edu>
254
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).
258
259 2006-01-02  Jonathan Pryor <jonpryor@vt.edu>
260
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.
268
269 2006-01-02  Jonathan Pryor <jonpryor@vt.edu>
270
271         * UnixMarshal.cs: s/EACCESS/EACCES/g.  I can't read.
272
273 2006-01-02  Jonathan Pryor <jonpryor@vt.edu>
274
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
284
285 2006-01-02  Jonathan Pryor <jonpryor@vt.edu>
286
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().
309
310 2005-12-28  Jonathan Pryor <jonpryor@vt.edu>
311
312         * FileHandleOperations.cs: Check for null references.
313
314 2005-12-28  Jonathan Pryor <jonpryor@vt.edu>
315
316         * UnixMarshal.cs: Errno.EBADF should also trigger a ArgumentException.
317
318 2005-12-27  Jonathan Pryor <jonpryor@vt.edu>
319
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.
330
331 2005-12-07  Jonathan Pryor <jonpryor@vt.edu>
332
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.
339
340 2005-11-18  Jonathan Pryor <jonpryor@vt.edu>
341
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.
355
356 2005-11-08  Jonathan Pryor <jonpryor@vt.edu>
357
358         * Catalog.cs: Exception safety improvements (don't let memory leak!); check
359           for errors with bindtextdomain(3) et. al.
360
361 2005-11-08  Jonathan Pryor <jonpryor@vt.edu>
362
363         * UnixPipes.cs: Provide Equals, GetHashCode, and operator==/operator!= to
364           conform with FxCop guidelines for structures.
365
366 2005-11-03  Jonathan Pryor <jonpryor@vt.edu>
367
368         * FileTypes.cs, UnixFileSystemInfo.cs: s/FIFO/Fifo/ to follow .NET
369           naming conventions (as reported by FxCop).
370
371 2005-11-01  Jonathan Pryor <jonpryor@vt.edu>
372
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.
377
378 2005-11-01  Jonathan Pryor <jonpryor@vt.edu>
379
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.
401
402 2005-10-27  Jonathan Pryor <jonpryor@vt.edu>
403
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.
408
409 2005-10-26  Jonathan Pryor <jonpryor@vt.edu>
410
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.
415
416 2005-10-26  Jonathan Pryor <jonpryor@vt.edu>
417
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.
422
423 2005-10-26  Jonathan Pryor <jonpryor@vt.edu>
424
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.
428
429 2005-10-25  Jonathan Pryor <jonpryor@vt.edu>
430
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.
440
441 2005-10-21  Jonathan Pryor <jonpryor@vt.edu>
442
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.
446
447 2005-10-19  Jonathan Pryor <jonpryor@vt.edu>
448
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.
455
456 2005-10-17  Jonathan Pryor <jonpryor@vt.edu>
457
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.
462
463 2005-10-17  Jonathan Pryor <jonpryor@vt.edu>
464
465         * UnixFileSystemInfo.cs: Add OwnerUserId and OwnerGroupId properties.
466
467 2005-10-17  Jonathan Pryor <jonpryor@vt.edu>
468
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.
474
475 2005-10-17  Jonathan Pryor <jonpryor@vt.edu>
476
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.
484
485 2005-10-14  Jonathan Pryor <jonpryor@vt.edu>
486
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.
495
496 2005-10-13  Jonathan Pryor <jonpryor@vt.edu>
497
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.
505
506 2005-10-12  Jonathan Pryor <jonpryor@vt.edu>
507
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.
512
513 2005-10-06  Jonathan Pryor <jonpryor@vt.edu>
514
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().
520
521 2005-09-26  Jonathan Pryor <jonpryor@vt.edu>
522
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.
529
530 2005-09-20  Jonathan Pryor <jonpryor@vt.edu>
531
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).
535
536 2005-09-20  Jonathan Pryor <jonpryor@vt.edu>
537
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.
557
558 2005-09-02  Jonathan Pryor <jonpryor@vt.edu>
559
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.
566
567 2005-07-01  Daniel Drake  <dsd@gentoo.org>
568
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.
571
572 2005-06-29  Miguel de Icaza  <miguel@ximian.com>
573
574         * StdioFileStream.cs: Only flush if we do not own the handle, as
575         fclose does a flush internally.
576
577 2005-06-29  Jonathan Pryor <jonpryor@vt.edu>
578
579         * UnixEnvironment: Add User, Login properties.
580         * Syscall.cs: Add locking around cuserid, crypt, encrypt, getlogin.
581
582 2005-06-29  Jonathan Pryor <jonpryor@vt.edu>
583
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.
596
597 2005-06-28  Jonathan Pryor <jonpryor@vt.edu>
598
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.
603
604 2005-06-15  Jonathan Pryor <jonpryor@vt.edu>
605
606         * Syscall.cs: s/LOG_USRE/LOG_USER/.  Fixes #75274.  
607           Thanks to Martin Honermeyer.
608
609 2005-06-09  Jonathan Pryor <jonpryor@vt.edu>
610
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).
615
616 2005-06-08  Jonathan Pryor <jonpryor@vt.edu>
617
618         * Syscall.cs: Add execvp(2).  (This should have been added with the other
619           exec(2) additions...).
620
621 2005-06-08  Jonathan Pryor <jonpryor@vt.edu>
622
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.
630
631 2005-06-07  Jonathan Pryor <jonpryor@vt.edu>
632
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)).
638
639 2005-06-07  Jonathan Pryor <jonpryor@vt.edu>
640
641         * Syscall.cs: Document naming conventions.
642
643 2005-06-05  Jonathan Pryor <jonpryor@vt.edu>
644
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.
650
651 2005-06-03  Jonathan Pryor <jonpryor@vt.edu>
652
653         * Stdlib.cs: Add sanity checking to snprintf(3) to avoid buffer overflows.
654
655 2005-06-02  Jonathan Pryor <jonpryor@vt.edu>
656
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).
673
674 2005-05-31  Jonathan Pryor <jonpryor@vt.edu>
675
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.
684
685 2005-05-31  Jonathan Pryor <jonpryor@vt.edu>
686
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).
689
690 2005-05-18  Jonathan Pryor <jonpryor@vt.edu>
691
692         * Stdlib.cs: Correct Mono_Posix_Stdlib_InvokeSignalHandler export.
693
694 2005-05-18  Jonathan Pryor <jonpryor@vt.edu>
695
696         * make-map.cs: Process the Mono.Posix namespace as well as Mono.Unix; add
697           mapping for Boolean => int for native type conversion.
698
699 2005-05-18  Jonathan Pryor <jonpryor@vt.edu>
700
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.
723
724 2005-05-12  Jonathan Pryor <jonpryor@vt.edu>
725
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.
730
731 2005-05-02  Joe Shaw  <joeshaw@novell.com>
732
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.
737
738 2005-04-30  Ben Maurer  <bmaurer@ximian.com>
739
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.
743
744 2005-04-29  Jonathan Pryor <jonpryor@vt.edu>
745
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).
750
751 2005-04-29  Jonathan Pryor <jonpryor@vt.edu>
752
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.
757
758 2005-04-21 Gonzalo Paniagua Javier <gonzalo@ximian.com>
759
760         * UnixClient.cs:
761         * UnixListener.cs: TcpListener/TcpClient clones from Jow Shaw.
762
763 2005-04-21 Gonzalo Paniagua Javier <gonzalo@ximian.com>
764
765         * Mono.Posix.dll.sources: added UnixListener and UnixClient from Joe
766         Shaw.
767
768 2005-04-21 Gonzalo Paniagua Javier <gonzalo@ximian.com>
769
770         * UnixEndPoint.cs: fix from Mono.Posix.
771
772 2005-04-20  Jonathan Pryor <jonpryor@vt.edu>
773
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.
799
800 2005-04-18  Jonathan Pryor <jonpryor@vt.edu>
801
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.
805
806 2005-04-16  Daniel Drake <dsd@gentoo.org>
807
808         * Syscall.cs: Add bindings for extended attribute manipulation
809
810 2005-04-05  Miguel de Icaza  <miguel@novell.com>
811
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.
815
816 2005-03-28  Jonathan Pryor <jonpryor@vt.edu>
817
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).
825
826 2005-03-17  Jonathan Pryor <jonpryor@vt.edu>
827
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.
837
838 2005-02-02  Jonathan Pryor <jonpryor@vt.edu>
839
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.
843
844 2005-02-02  Jonathan Pryor <jonpryor@vt.edu>
845
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.
849
850 2005-02-02  Jonathan Pryor <jonpryor@vt.edu>
851
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.
854
855 2005-01-31  Jonathan Pryor <jonpryor@vt.edu>
856
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.
865
866 2005-01-29  Jonathan Pryor <jonpryor@vt.edu>
867
868         * Stdlib.cs: sys_* functions shouldn't be public.
869
870 2005-01-13  Jonathan Pryor <jonpryor@vt.edu>
871
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.
875
876 2005-01-13  Jonathan Pryor <jonpryor@vt.edu>
877
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.
881
882 2005-01-05  Jonathan Pryor <jonpryor@vt.edu>
883
884         * StdioFileStream.cs: Added; System.IO.Stream wrapper for C FILE struct.
885         * Stdlib.cs: Correct visibility of ftell().
886
887 2005-01-05  Jonathan Pryor <jonpryor@vt.edu>
888
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.
894
895 2005-01-03  Jonathan Pryor <jonpryor@vt.edu>
896
897         * Syscall.cs: Update endfsent() and setfsent() declarations, as these must
898           now be implemented in MonoPosixHelper.
899
900 2005-01-01  Jonathan Pryor <jonpryor@vt.edu>
901
902         * Stdlib.cs, Syscall.cs: Minimize duplicate declarations of
903           "MonoPosixHelper" for use in DllImport statements.
904
905 2005-01-01  Jonathan Pryor <jonpryor@vt.edu>
906
907         * Stdlib.cs: Don't use C# v2 features; fixes build under CSC.EXE.
908
909 2004-12-30  Jonathan Pryor <jonpryor@vt.edu>
910
911         * Stdlib.cs: On miguel's suggestion, rename Sighandler_t to SignalHandler.
912
913 2004-12-30  Jonathan Pryor <jonpryor@vt.edu>
914
915         * Stdlib.cs: Implement all C89 <stdio.h> functions except for the scanf(3)
916           family.  These are too dangerous to expose.
917
918 2004-12-30  Jonathan Pryor <jonpryor@vt.edu>
919
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.
925
926 2004-12-29  Jonathan Pryor <jonpryor@vt.edu>
927
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.
932
933 2004-12-29  Jonathan Pryor <jonpryor@vt.edu>
934
935         * UnixPath.cs: Add check for when symlink points to a full path name.
936
937 2004-12-29  Jonathan Pryor <jonpryor@vt.edu>
938
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.
946
947 2004-12-28  Jonathan Pryor <jonpryor@vt.edu>
948
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...
953
954 2004-12-28  Jonathan Pryor <jonpryor@vt.edu>
955
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
979
980 2004-12-28  Jonathan Pryor <jonpryor@vt.edu>
981
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.
995
996 2004-12-15  Jonathan Pryor <jonpryor@vt.edu>
997
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.
1003
1004 2004-11-18  Jonathan Pryor <jonpryor@vt.edu>
1005
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.
1026
1027 2004-11-16  Jonathan Pryor <jonpryor@vt.edu>
1028
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.)
1036
1037 2004-11-16  Jonathan Pryor <jonpryor@vt.edu>
1038
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).
1044
1045 2004-11-16  Jonathan Pryor <jonpryor@vt.edu>
1046
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.
1070
1071 2004-11-15  Jonathan Pryor <jonpryor@vt.edu>
1072
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().
1093
1094 2004-11-12  Jonathan Pryor <jonpryor@vt.edu>
1095
1096         * Syscall.cs: Export time-related functions (gettimeofday, settimeofday,
1097           utime, utimes), mknod.
1098
1099 2004-11-07  Atsushi Enomoto  <atsushi@ximian.com>
1100
1101         * PosixEnvironment.cs : csc build fix. see bug #69195.
1102         * PosixStream.cs : csc build fix. see bug #69196.
1103
1104 2004-11-05  Jonathan Pryor  <jonpryor@vt.edu>
1105
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.
1140
1141 2004-09-18  Jackson Harper  <jackson@ximian.com>
1142
1143         * Syscall.cs: Add support for poll ().
1144
1145 2004-09-18  Jackson Harper  <jackson@ximian.com>
1146
1147         * make-map.cs: Use field value not name for #defines.
1148                 
1149 2004-09-14  Loren Bandiera <lorenb@mmgsecurity.com>
1150
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.)
1155
1156 2004-07-09  Dick Porter  <dick@ximian.com>
1157
1158         * PeerCred.cs: Get the unix socket peer credentials.
1159
1160 2004-05-26  Miguel de Icaza  <miguel@ximian.com>
1161
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. 
1165
1166 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
1167
1168         * Syscall.cs: Add symlink
1169
1170 2004-04-19  Miguel de Icaza  <miguel@ximian.com>
1171
1172         * Syscall.cs: Use hex values for FileMode, since C# does not have
1173         an octal integer mode.
1174
1175 2004-03-30  Joshua Tauberer <tauberer@for.net>
1176
1177         * Added readlink, strerror, opendir, readdir, closedir
1178         * Added Mono.Posix.Stat.UnixToDateTime(long unixtime) --> DateTime
1179
1180 2004-03-11  Joshua Tauberer <tauberer@for.net>
1181
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.
1189
1190 2004-01-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1191
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         
1197
1198 2004-01-05  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1199
1200         * Syscall.cs: moved assembly attribute and added unsafe block to fix
1201         the build on windows.
1202
1203 2003-11-11  Wojciech Polak <polak@gnu.org
1204
1205         * Syscall.cs: Applied patch from Wojciech Polak <polak@gnu.org> to
1206         support IsAtty.
1207
1208 2003-05-16  Dick Porter  <dick@ximian.com>
1209
1210         * UnixEndPoint.cs: New property to get and set the filename, like
1211         the IPEndPoint has for the IP address.  Also implement ToString().
1212
1213 Tue Apr 29 16:53:56 CEST 2003 Paolo Molaro <lupus@ximian.com>
1214
1215         * Syscall.cs: remove the unsafe mess.
1216
1217 2003-02-05  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1218
1219         * Check in.
1220         * UnixEndPoint.cs: first file.
1221