| File: src\runtime\src\libraries\Common\src\Interop\Linux\System.Native\Interop.INotify.cs | Web Access |
| Project: src\runtime\src\libraries\System.IO.FileSystem.Watcher\src\System.IO.FileSystem.Watcher.csproj (System.IO.FileSystem.Watcher) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; internal static partial class Interop { internal static partial class Sys { [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_INotifyInit", SetLastError = true)] internal static partial SafeFileHandle INotifyInit(); [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_INotifyAddWatch", StringMarshalling = StringMarshalling.Utf8, SetLastError = true)] internal static partial int INotifyAddWatch(SafeFileHandle fd, string pathName, uint mask); [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_INotifyRemoveWatch", SetLastError = true)] private static partial int INotifyRemoveWatch_private(SafeFileHandle fd, int wd); internal static int INotifyRemoveWatch(SafeFileHandle fd, int wd) { int result = INotifyRemoveWatch_private(fd, wd); if (result < 0) { Error hr = GetLastError(); if (hr == Error.EINVAL) { // This specific case means that there was a deleted event in the queue that was not processed // so this call is expected to fail since the WatchDescriptor is no longer valid and was cleaned // up automatically by the OS. result = 0; } else { Debug.Fail("inotify_rm_watch failed with " + hr); } } return result; } [Flags] internal enum NotifyEvents { IN_ACCESS = 0x00000001, IN_MODIFY = 0x00000002, IN_ATTRIB = 0x00000004, IN_MOVED_FROM = 0x00000040, IN_MOVED_TO = 0x00000080, IN_CREATE = 0x00000100, IN_DELETE = 0x00000200, IN_MOVE_SELF = 0x00000800, IN_Q_OVERFLOW = 0x00004000, IN_IGNORED = 0x00008000, IN_ONLYDIR = 0x01000000, IN_DONT_FOLLOW = 0x02000000, IN_EXCL_UNLINK = 0x04000000, IN_MASK_ADD = 0x20000000, IN_ISDIR = 0x40000000, } } }