Vendor things

This commit is contained in:
John Doty 2024-03-08 11:03:01 -08:00
parent 5deceec006
commit 977e3c17e5
19434 changed files with 10682014 additions and 0 deletions

View file

@ -0,0 +1 @@
{"files":{"Cargo.toml":"de02da7a5e4e48b9efd8d5d03e26e7ed86b04e9a91396b2a3e89bebf8fb39a78","LICENSE":"c4d64f0ce17c85d4a14e22d224fbbd76dbb1e03eb38f0d3c209fb38bdc8dc646","src/core_foundation.rs":"94e10b202d8d74b01d12068bd30bb080dc35705114e17342c8ce46eba6b51f4e","src/fsevent.rs":"00508ec4de5e3ff3b2266d30000991273e4d3200409cc81449b94f100f02933e","src/lib.rs":"cdf97755f6dde15f9bae450c51be7d573c0dad0519bebad16796bbd2a3467537"},"package":"76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"}

View file

@ -0,0 +1,24 @@
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
#
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies
#
# If you believe there's an error in this file please file an
# issue against the rust-lang/cargo repository. If you're
# editing this file be aware that the upstream Cargo.toml
# will likely look very different (and much more reasonable)
[package]
edition = "2018"
name = "fsevent-sys"
version = "4.1.0"
authors = ["Pierre Baillet <pierre@baillet.name>"]
description = "Rust bindings to the fsevent macOS API for file changes notifications"
license = "MIT"
repository = "https://github.com/octplane/fsevent-rust/tree/master/fsevent-sys"
[package.metadata.docs.rs]
targets = ["x86_64-apple-darwin"]
[dependencies.libc]
version = "0.2.68"

22
third-party/vendor/fsevent-sys/LICENSE vendored Normal file
View file

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2015 Pierre Baillet
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,230 @@
#![allow(non_upper_case_globals, non_camel_case_types)]
extern crate libc;
use std::ffi::CString;
use std::ptr;
use std::str;
pub type Boolean = ::std::os::raw::c_uchar;
pub type CFRef = *mut ::std::os::raw::c_void;
pub type CFIndex = ::std::os::raw::c_long;
pub type CFTimeInterval = f64;
pub type CFAbsoluteTime = CFTimeInterval;
#[doc(hidden)]
pub enum CFError {}
pub type CFAllocatorRef = CFRef;
pub type CFArrayRef = CFRef;
pub type CFMutableArrayRef = CFRef;
pub type CFURLRef = CFRef;
pub type CFErrorRef = *mut CFError;
pub type CFStringRef = CFRef;
pub type CFRunLoopRef = CFRef;
pub const NULL: CFRef = 0 as CFRef;
pub const NULL_REF_PTR: *mut CFRef = 0 as *mut CFRef;
pub type CFAllocatorRetainCallBack =
extern "C" fn(*const ::std::os::raw::c_void) -> *const ::std::os::raw::c_void;
pub type CFAllocatorReleaseCallBack = extern "C" fn(*const ::std::os::raw::c_void);
pub type CFAllocatorCopyDescriptionCallBack =
extern "C" fn(*const ::std::os::raw::c_void) -> *const CFStringRef;
pub type CFURLPathStyle = CFIndex;
pub const kCFAllocatorDefault: CFAllocatorRef = NULL;
pub const kCFURLPOSIXPathStyle: CFURLPathStyle = 0;
pub const kCFURLHFSPathStyle: CFURLPathStyle = 1;
pub const kCFURLWindowsPathStyle: CFURLPathStyle = 2;
pub const kCFStringEncodingUTF8: CFStringEncoding = 0x08000100;
pub type CFStringEncoding = u32;
pub const kCFCompareEqualTo: CFIndex = 0;
pub type CFComparisonResult = CFIndex;
// MacOS uses Case Insensitive path
pub const kCFCompareCaseInsensitive: CFStringCompareFlags = 1;
pub type CFStringCompareFlags = ::std::os::raw::c_ulong;
pub type CFArrayRetainCallBack =
extern "C" fn(CFAllocatorRef, *const ::std::os::raw::c_void) -> *const ::std::os::raw::c_void;
pub type CFArrayReleaseCallBack = extern "C" fn(CFAllocatorRef, *const ::std::os::raw::c_void);
pub type CFArrayCopyDescriptionCallBack =
extern "C" fn(*const ::std::os::raw::c_void) -> CFStringRef;
pub type CFArrayEqualCallBack =
extern "C" fn(*const ::std::os::raw::c_void, *const ::std::os::raw::c_void) -> Boolean;
#[repr(C)]
pub struct CFArrayCallBacks {
version: CFIndex,
retain: Option<CFArrayRetainCallBack>,
release: Option<CFArrayReleaseCallBack>,
cp: Option<CFArrayCopyDescriptionCallBack>,
equal: Option<CFArrayEqualCallBack>,
}
//impl Clone for CFArrayCallBacks { }
#[link(name = "CoreFoundation", kind = "framework")]
extern "C" {
pub static kCFTypeArrayCallBacks: CFArrayCallBacks;
pub static kCFRunLoopDefaultMode: CFStringRef;
pub fn CFRelease(res: CFRef);
pub fn CFShow(res: CFRef);
pub fn CFCopyDescription(cf: CFRef) -> CFStringRef;
pub fn CFRunLoopRun();
pub fn CFRunLoopStop(run_loop: CFRunLoopRef);
pub fn CFRunLoopGetCurrent() -> CFRunLoopRef;
pub fn CFArrayCreateMutable(
allocator: CFRef,
capacity: CFIndex,
callbacks: *const CFArrayCallBacks,
) -> CFMutableArrayRef;
pub fn CFArrayInsertValueAtIndex(arr: CFMutableArrayRef, position: CFIndex, element: CFRef);
pub fn CFArrayAppendValue(aff: CFMutableArrayRef, element: CFRef);
pub fn CFArrayGetCount(arr: CFMutableArrayRef) -> CFIndex;
pub fn CFArrayGetValueAtIndex(arr: CFMutableArrayRef, index: CFIndex) -> CFRef;
pub fn CFURLCreateFileReferenceURL(
allocator: CFRef,
url: CFURLRef,
err: *mut CFErrorRef,
) -> CFURLRef;
pub fn CFURLCreateFilePathURL(
allocator: CFRef,
url: CFURLRef,
err: *mut CFErrorRef,
) -> CFURLRef;
pub fn CFURLCreateFromFileSystemRepresentation(
allocator: CFRef,
path: *const ::std::os::raw::c_char,
len: CFIndex,
is_directory: bool,
) -> CFURLRef;
pub fn CFURLCopyAbsoluteURL(res: CFURLRef) -> CFURLRef;
pub fn CFURLCopyLastPathComponent(res: CFURLRef) -> CFStringRef;
pub fn CFURLCreateCopyDeletingLastPathComponent(allocator: CFRef, url: CFURLRef) -> CFURLRef;
pub fn CFURLCreateCopyAppendingPathComponent(
allocation: CFRef,
url: CFURLRef,
path: CFStringRef,
is_directory: bool,
) -> CFURLRef;
pub fn CFURLCopyFileSystemPath(anUrl: CFURLRef, path_style: CFURLPathStyle) -> CFStringRef;
pub fn CFURLResourceIsReachable(res: CFURLRef, err: *mut CFErrorRef) -> bool;
pub fn CFShowStr(str: CFStringRef);
pub fn CFStringGetCString(
theString: CFStringRef,
buffer: *mut ::std::os::raw::c_char,
buffer_size: CFIndex,
encoding: CFStringEncoding,
) -> bool;
pub fn CFStringGetCStringPtr(
theString: CFStringRef,
encoding: CFStringEncoding,
) -> *const ::std::os::raw::c_char;
pub fn CFStringCreateWithCString(
alloc: CFRef,
source: *const ::std::os::raw::c_char,
encoding: CFStringEncoding,
) -> CFStringRef;
pub fn CFStringCompare(
theString1: CFStringRef,
theString2: CFStringRef,
compareOptions: CFStringCompareFlags,
) -> CFComparisonResult;
pub fn CFArrayRemoveValueAtIndex(theArray: CFMutableArrayRef, idx: CFIndex);
}
pub unsafe fn str_path_to_cfstring_ref(source: &str, err: &mut CFErrorRef) -> CFStringRef {
let c_path = CString::new(source).unwrap();
let c_len = libc::strlen(c_path.as_ptr());
let mut url = CFURLCreateFromFileSystemRepresentation(
kCFAllocatorDefault,
c_path.as_ptr(),
c_len as CFIndex,
false,
);
if url.is_null() {
return ptr::null_mut();
}
let mut placeholder = CFURLCopyAbsoluteURL(url);
CFRelease(url);
if placeholder.is_null() {
return ptr::null_mut();
}
let mut imaginary: CFRef = ptr::null_mut();
while !CFURLResourceIsReachable(placeholder, ptr::null_mut()) {
if imaginary.is_null() {
imaginary = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
if imaginary.is_null() {
CFRelease(placeholder);
return ptr::null_mut();
}
}
let child = CFURLCopyLastPathComponent(placeholder);
CFArrayInsertValueAtIndex(imaginary, 0, child);
CFRelease(child);
url = CFURLCreateCopyDeletingLastPathComponent(kCFAllocatorDefault, placeholder);
CFRelease(placeholder);
placeholder = url;
}
url = CFURLCreateFileReferenceURL(kCFAllocatorDefault, placeholder, err);
CFRelease(placeholder);
if url.is_null() {
if !imaginary.is_null() {
CFRelease(imaginary);
}
return ptr::null_mut();
}
placeholder = CFURLCreateFilePathURL(kCFAllocatorDefault, url, err);
CFRelease(url);
if placeholder.is_null() {
if !imaginary.is_null() {
CFRelease(imaginary);
}
return ptr::null_mut();
}
if !imaginary.is_null() {
let mut count = 0;
while count < CFArrayGetCount(imaginary) {
let component = CFArrayGetValueAtIndex(imaginary, count);
url = CFURLCreateCopyAppendingPathComponent(
kCFAllocatorDefault,
placeholder,
component,
false,
);
CFRelease(placeholder);
if url.is_null() {
CFRelease(imaginary);
return ptr::null_mut();
}
placeholder = url;
count += 1;
}
CFRelease(imaginary);
}
let cf_path = CFURLCopyFileSystemPath(placeholder, kCFURLPOSIXPathStyle);
CFRelease(placeholder);
cf_path
}

View file

@ -0,0 +1,135 @@
#![allow(non_upper_case_globals, non_camel_case_types)]
use crate::core_foundation::{
Boolean, CFAbsoluteTime, CFAllocatorCopyDescriptionCallBack, CFAllocatorRef,
CFAllocatorReleaseCallBack, CFAllocatorRetainCallBack, CFArrayRef, CFIndex, CFRunLoopRef,
CFStringRef, CFTimeInterval,
};
use libc::dev_t;
use std::os::raw::{c_uint, c_void};
pub type FSEventStreamRef = *mut c_void;
pub type ConstFSEventStreamRef = *const c_void;
pub type FSEventStreamCallback = extern "C" fn(
FSEventStreamRef, // ConstFSEventStreamRef streamRef
*mut c_void, // void *clientCallBackInfo
usize, // size_t numEvents
*mut c_void, // void *eventPaths
*const FSEventStreamEventFlags, // const FSEventStreamEventFlags eventFlags[]
*const FSEventStreamEventId, // const FSEventStreamEventId eventIds[]
);
pub type FSEventStreamEventId = u64;
pub type FSEventStreamCreateFlags = c_uint;
pub type FSEventStreamEventFlags = c_uint;
pub const kFSEventStreamEventIdSinceNow: FSEventStreamEventId = 0xFFFFFFFFFFFFFFFF;
pub const kFSEventStreamCreateFlagNone: FSEventStreamCreateFlags = 0x00000000;
pub const kFSEventStreamCreateFlagUseCFTypes: FSEventStreamCreateFlags = 0x00000001;
pub const kFSEventStreamCreateFlagNoDefer: FSEventStreamCreateFlags = 0x00000002;
pub const kFSEventStreamCreateFlagWatchRoot: FSEventStreamCreateFlags = 0x00000004;
pub const kFSEventStreamCreateFlagIgnoreSelf: FSEventStreamCreateFlags = 0x00000008;
pub const kFSEventStreamCreateFlagFileEvents: FSEventStreamCreateFlags = 0x00000010;
pub const kFSEventStreamCreateFlagMarkSelf: FSEventStreamCreateFlags = 0x00000020;
pub const kFSEventStreamCreateFlagUseExtendedData: FSEventStreamCreateFlags = 0x00000040;
pub const kFSEventStreamCreateFlagFullHistory: FSEventStreamCreateFlags = 0x00000080;
pub const kFSEventStreamEventFlagNone: FSEventStreamEventFlags = 0x00000000;
pub const kFSEventStreamEventFlagMustScanSubDirs: FSEventStreamEventFlags = 0x00000001;
pub const kFSEventStreamEventFlagUserDropped: FSEventStreamEventFlags = 0x00000002;
pub const kFSEventStreamEventFlagKernelDropped: FSEventStreamEventFlags = 0x00000004;
pub const kFSEventStreamEventFlagEventIdsWrapped: FSEventStreamEventFlags = 0x00000008;
pub const kFSEventStreamEventFlagHistoryDone: FSEventStreamEventFlags = 0x00000010;
pub const kFSEventStreamEventFlagRootChanged: FSEventStreamEventFlags = 0x00000020;
pub const kFSEventStreamEventFlagMount: FSEventStreamEventFlags = 0x00000040;
pub const kFSEventStreamEventFlagUnmount: FSEventStreamEventFlags = 0x00000080;
pub const kFSEventStreamEventFlagItemCreated: FSEventStreamEventFlags = 0x00000100;
pub const kFSEventStreamEventFlagItemRemoved: FSEventStreamEventFlags = 0x00000200;
pub const kFSEventStreamEventFlagItemInodeMetaMod: FSEventStreamEventFlags = 0x00000400;
pub const kFSEventStreamEventFlagItemRenamed: FSEventStreamEventFlags = 0x00000800;
pub const kFSEventStreamEventFlagItemModified: FSEventStreamEventFlags = 0x00001000;
pub const kFSEventStreamEventFlagItemFinderInfoMod: FSEventStreamEventFlags = 0x00002000;
pub const kFSEventStreamEventFlagItemChangeOwner: FSEventStreamEventFlags = 0x00004000;
pub const kFSEventStreamEventFlagItemXattrMod: FSEventStreamEventFlags = 0x00008000;
pub const kFSEventStreamEventFlagItemIsFile: FSEventStreamEventFlags = 0x00010000;
pub const kFSEventStreamEventFlagItemIsDir: FSEventStreamEventFlags = 0x00020000;
pub const kFSEventStreamEventFlagItemIsSymlink: FSEventStreamEventFlags = 0x00040000;
pub const kFSEventStreamEventFlagOwnEvent: FSEventStreamEventFlags = 0x00080000;
pub const kFSEventStreamEventFlagItemIsHardlink: FSEventStreamEventFlags = 0x00100000;
pub const kFSEventStreamEventFlagItemIsLastHardlink: FSEventStreamEventFlags = 0x00200000;
pub const kFSEventStreamEventFlagItemCloned: FSEventStreamEventFlags = 0x00400000;
#[repr(C)]
pub struct FSEventStreamContext {
pub version: CFIndex,
pub info: *mut c_void,
pub retain: Option<CFAllocatorRetainCallBack>,
pub release: Option<CFAllocatorReleaseCallBack>,
pub copy_description: Option<CFAllocatorCopyDescriptionCallBack>,
}
// https://developer.apple.com/documentation/coreservices/file_system_events
#[link(name = "CoreServices", kind = "framework")]
extern "C" {
pub fn FSEventStreamCopyDescription(stream_ref: ConstFSEventStreamRef) -> CFStringRef;
pub fn FSEventStreamCopyPathsBeingWatched(streamRef: ConstFSEventStreamRef) -> CFArrayRef;
pub fn FSEventStreamCreate(
allocator: CFAllocatorRef,
callback: FSEventStreamCallback,
context: *const FSEventStreamContext,
pathsToWatch: CFArrayRef,
sinceWhen: FSEventStreamEventId,
latency: CFTimeInterval,
flags: FSEventStreamCreateFlags,
) -> FSEventStreamRef;
pub fn FSEventStreamCreateRelativeToDevice(
allocator: CFAllocatorRef,
callback: FSEventStreamCallback,
context: *const FSEventStreamContext,
deviceToWatch: dev_t,
pathsToWatchRelativeToDevice: CFArrayRef,
sinceWhen: FSEventStreamEventId,
latency: CFTimeInterval,
flags: FSEventStreamCreateFlags,
) -> FSEventStreamRef;
pub fn FSEventStreamFlushAsync(stream_ref: FSEventStreamRef) -> FSEventStreamEventId;
pub fn FSEventStreamFlushSync(streamRef: FSEventStreamRef);
pub fn FSEventStreamGetDeviceBeingWatched(stream_ref: ConstFSEventStreamRef) -> dev_t;
pub fn FSEventStreamGetLatestEventId(stream_ref: ConstFSEventStreamRef)
-> FSEventStreamEventId;
pub fn FSEventStreamInvalidate(stream_ref: FSEventStreamRef);
pub fn FSEventStreamRelease(stream_ref: FSEventStreamRef);
pub fn FSEventStreamRetain(stream_ref: FSEventStreamRef);
pub fn FSEventStreamScheduleWithRunLoop(
stream_ref: FSEventStreamRef,
run_loop: CFRunLoopRef,
run_loop_mode: CFStringRef,
);
// pub fn FSEventStreamSetDispatchQueue(streamRef: FSEventStreamRef, q: DispatchQueue);
pub fn FSEventStreamSetExclusionPaths(
stream_ref: FSEventStreamRef,
paths_to_exclude: CFArrayRef,
) -> Boolean;
pub fn FSEventStreamShow(stream_ref: FSEventStreamRef);
pub fn FSEventStreamStart(stream_ref: FSEventStreamRef) -> Boolean;
pub fn FSEventStreamStop(stream_ref: FSEventStreamRef);
pub fn FSEventStreamUnscheduleFromRunLoop(
stream_ref: FSEventStreamRef,
run_loop: CFRunLoopRef,
run_loop_mode: CFStringRef,
);
// pub fn FSEventsCopyUUIDForDevice(dev: dev_t) -> CFUUID;
pub fn FSEventsGetCurrentEventId() -> FSEventStreamEventId;
pub fn FSEventsGetLastEventIdForDeviceBeforeTime(
dev: dev_t,
time: CFAbsoluteTime,
) -> FSEventStreamEventId;
pub fn FSEventsPurgeEventsForDeviceUpToEventId(
dev: dev_t,
eventId: FSEventStreamEventId,
) -> Boolean;
}

View file

@ -0,0 +1,7 @@
#![cfg(target_os = "macos")]
#![cfg_attr(feature = "cargo-clippy", allow(unreadable_literal))]
pub mod core_foundation;
mod fsevent;
pub use fsevent::*;