Constants.swift 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800
  1. /*
  2. This source file is part of the Swift System open source project
  3. Copyright (c) 2020 - 2026 Apple Inc. and the Swift System project authors
  4. Licensed under Apache License v2.0 with Runtime Library Exception
  5. See https://swift.org/LICENSE.txt for license information
  6. */
  7. // For platform constants redefined in Swift. We define them here so that
  8. // they can be used anywhere without imports and without confusion to
  9. // unavailable local decls.
  10. #if SYSTEM_PACKAGE_DARWIN
  11. import Darwin
  12. #elseif os(Windows)
  13. import ucrt
  14. #elseif canImport(Glibc)
  15. import Glibc
  16. #elseif canImport(Musl)
  17. import Musl
  18. #elseif canImport(WASILibc)
  19. import WASILibc
  20. #elseif canImport(Android)
  21. import Android
  22. #else
  23. #error("Unsupported Platform")
  24. #endif
  25. import CSystem
  26. // MARK: errno
  27. #if SYSTEM_PACKAGE_DARWIN
  28. @_alwaysEmitIntoClient
  29. internal var _ERRNO_NOT_USED: CInt { 0 }
  30. #endif
  31. @_alwaysEmitIntoClient
  32. internal var _EPERM: CInt { EPERM }
  33. @_alwaysEmitIntoClient
  34. internal var _ENOENT: CInt { ENOENT }
  35. @_alwaysEmitIntoClient
  36. internal var _ESRCH: CInt { ESRCH }
  37. @_alwaysEmitIntoClient
  38. internal var _EINTR: CInt { EINTR }
  39. @_alwaysEmitIntoClient
  40. internal var _EIO: CInt { EIO }
  41. @_alwaysEmitIntoClient
  42. internal var _ENXIO: CInt { ENXIO }
  43. @_alwaysEmitIntoClient
  44. internal var _E2BIG: CInt { E2BIG }
  45. @_alwaysEmitIntoClient
  46. internal var _ENOEXEC: CInt { ENOEXEC }
  47. @_alwaysEmitIntoClient
  48. internal var _EBADF: CInt { EBADF }
  49. @_alwaysEmitIntoClient
  50. internal var _ECHILD: CInt { ECHILD }
  51. @_alwaysEmitIntoClient
  52. internal var _EDEADLK: CInt { EDEADLK }
  53. @_alwaysEmitIntoClient
  54. internal var _ENOMEM: CInt { ENOMEM }
  55. @_alwaysEmitIntoClient
  56. internal var _EACCES: CInt { EACCES }
  57. @_alwaysEmitIntoClient
  58. internal var _EFAULT: CInt { EFAULT }
  59. #if !os(Windows) && !os(WASI)
  60. @_alwaysEmitIntoClient
  61. internal var _ENOTBLK: CInt { ENOTBLK }
  62. #endif
  63. @_alwaysEmitIntoClient
  64. internal var _EBUSY: CInt { EBUSY }
  65. @_alwaysEmitIntoClient
  66. internal var _EEXIST: CInt { EEXIST }
  67. @_alwaysEmitIntoClient
  68. internal var _EXDEV: CInt { EXDEV }
  69. @_alwaysEmitIntoClient
  70. internal var _ENODEV: CInt { ENODEV }
  71. @_alwaysEmitIntoClient
  72. internal var _ENOTDIR: CInt { ENOTDIR }
  73. @_alwaysEmitIntoClient
  74. internal var _EISDIR: CInt { EISDIR }
  75. @_alwaysEmitIntoClient
  76. internal var _EINVAL: CInt { EINVAL }
  77. @_alwaysEmitIntoClient
  78. internal var _ENFILE: CInt { ENFILE }
  79. @_alwaysEmitIntoClient
  80. internal var _EMFILE: CInt { EMFILE }
  81. #if !os(Windows)
  82. @_alwaysEmitIntoClient
  83. internal var _ENOTTY: CInt { ENOTTY }
  84. @_alwaysEmitIntoClient
  85. internal var _ETXTBSY: CInt { ETXTBSY }
  86. #endif
  87. @_alwaysEmitIntoClient
  88. internal var _EFBIG: CInt { EFBIG }
  89. @_alwaysEmitIntoClient
  90. internal var _ENOSPC: CInt { ENOSPC }
  91. @_alwaysEmitIntoClient
  92. internal var _ESPIPE: CInt { ESPIPE }
  93. @_alwaysEmitIntoClient
  94. internal var _EROFS: CInt { EROFS }
  95. @_alwaysEmitIntoClient
  96. internal var _EMLINK: CInt { EMLINK }
  97. @_alwaysEmitIntoClient
  98. internal var _EPIPE: CInt { EPIPE }
  99. @_alwaysEmitIntoClient
  100. internal var _EDOM: CInt { EDOM }
  101. @_alwaysEmitIntoClient
  102. internal var _ERANGE: CInt { ERANGE }
  103. @_alwaysEmitIntoClient
  104. internal var _EAGAIN: CInt { EAGAIN }
  105. @_alwaysEmitIntoClient
  106. internal var _EWOULDBLOCK: CInt {
  107. #if os(WASI)
  108. _getConst_EWOULDBLOCK()
  109. #else
  110. EWOULDBLOCK
  111. #endif
  112. }
  113. @_alwaysEmitIntoClient
  114. internal var _EINPROGRESS: CInt { EINPROGRESS }
  115. @_alwaysEmitIntoClient
  116. internal var _EALREADY: CInt { EALREADY }
  117. @_alwaysEmitIntoClient
  118. internal var _ENOTSOCK: CInt { ENOTSOCK }
  119. @_alwaysEmitIntoClient
  120. internal var _EDESTADDRREQ: CInt { EDESTADDRREQ }
  121. @_alwaysEmitIntoClient
  122. internal var _EMSGSIZE: CInt { EMSGSIZE }
  123. @_alwaysEmitIntoClient
  124. internal var _EPROTOTYPE: CInt { EPROTOTYPE }
  125. @_alwaysEmitIntoClient
  126. internal var _ENOPROTOOPT: CInt { ENOPROTOOPT }
  127. @_alwaysEmitIntoClient
  128. internal var _EPROTONOSUPPORT: CInt { EPROTONOSUPPORT }
  129. #if !os(WASI)
  130. @_alwaysEmitIntoClient
  131. internal var _ESOCKTNOSUPPORT: CInt {
  132. #if os(Windows)
  133. return WSAESOCKTNOSUPPORT
  134. #else
  135. return ESOCKTNOSUPPORT
  136. #endif
  137. }
  138. #endif
  139. @_alwaysEmitIntoClient
  140. internal var _ENOTSUP: CInt {
  141. #if os(Windows)
  142. return WSAEOPNOTSUPP
  143. #else
  144. return ENOTSUP
  145. #endif
  146. }
  147. #if !os(WASI)
  148. @_alwaysEmitIntoClient
  149. internal var _EPFNOSUPPORT: CInt {
  150. #if os(Windows)
  151. return WSAEPFNOSUPPORT
  152. #else
  153. return EPFNOSUPPORT
  154. #endif
  155. }
  156. #endif
  157. @_alwaysEmitIntoClient
  158. internal var _EAFNOSUPPORT: CInt { EAFNOSUPPORT }
  159. @_alwaysEmitIntoClient
  160. internal var _EADDRINUSE: CInt { EADDRINUSE }
  161. @_alwaysEmitIntoClient
  162. internal var _EADDRNOTAVAIL: CInt { EADDRNOTAVAIL }
  163. @_alwaysEmitIntoClient
  164. internal var _ENETDOWN: CInt { ENETDOWN }
  165. @_alwaysEmitIntoClient
  166. internal var _ENETUNREACH: CInt { ENETUNREACH }
  167. @_alwaysEmitIntoClient
  168. internal var _ENETRESET: CInt { ENETRESET }
  169. @_alwaysEmitIntoClient
  170. internal var _ECONNABORTED: CInt { ECONNABORTED }
  171. @_alwaysEmitIntoClient
  172. internal var _ECONNRESET: CInt { ECONNRESET }
  173. @_alwaysEmitIntoClient
  174. internal var _ENOBUFS: CInt { ENOBUFS }
  175. @_alwaysEmitIntoClient
  176. internal var _EISCONN: CInt { EISCONN }
  177. @_alwaysEmitIntoClient
  178. internal var _ENOTCONN: CInt { ENOTCONN }
  179. #if !os(WASI)
  180. @_alwaysEmitIntoClient
  181. internal var _ESHUTDOWN: CInt {
  182. #if os(Windows)
  183. return WSAESHUTDOWN
  184. #else
  185. return ESHUTDOWN
  186. #endif
  187. }
  188. @_alwaysEmitIntoClient
  189. internal var _ETOOMANYREFS: CInt {
  190. #if os(Windows)
  191. return WSAETOOMANYREFS
  192. #else
  193. return ETOOMANYREFS
  194. #endif
  195. }
  196. #endif
  197. @_alwaysEmitIntoClient
  198. internal var _ETIMEDOUT: CInt { ETIMEDOUT }
  199. @_alwaysEmitIntoClient
  200. internal var _ECONNREFUSED: CInt { ECONNREFUSED }
  201. @_alwaysEmitIntoClient
  202. internal var _ELOOP: CInt { ELOOP }
  203. @_alwaysEmitIntoClient
  204. internal var _ENAMETOOLONG: CInt { ENAMETOOLONG }
  205. #if !os(WASI)
  206. @_alwaysEmitIntoClient
  207. internal var _EHOSTDOWN: CInt {
  208. #if os(Windows)
  209. return WSAEHOSTDOWN
  210. #else
  211. return EHOSTDOWN
  212. #endif
  213. }
  214. #endif
  215. @_alwaysEmitIntoClient
  216. internal var _EHOSTUNREACH: CInt { EHOSTUNREACH }
  217. @_alwaysEmitIntoClient
  218. internal var _ENOTEMPTY: CInt { ENOTEMPTY }
  219. #if SYSTEM_PACKAGE_DARWIN
  220. @_alwaysEmitIntoClient
  221. internal var _EPROCLIM: CInt { EPROCLIM }
  222. #endif
  223. #if !os(WASI)
  224. @_alwaysEmitIntoClient
  225. internal var _EUSERS: CInt {
  226. #if os(Windows)
  227. return WSAEUSERS
  228. #else
  229. return EUSERS
  230. #endif
  231. }
  232. #endif
  233. @_alwaysEmitIntoClient
  234. internal var _EDQUOT: CInt {
  235. #if os(Windows)
  236. return WSAEDQUOT
  237. #else
  238. return EDQUOT
  239. #endif
  240. }
  241. @_alwaysEmitIntoClient
  242. internal var _ESTALE: CInt {
  243. #if os(Windows)
  244. return WSAESTALE
  245. #else
  246. return ESTALE
  247. #endif
  248. }
  249. #if !os(WASI)
  250. @_alwaysEmitIntoClient
  251. internal var _EREMOTE: CInt {
  252. #if os(Windows)
  253. return WSAEREMOTE
  254. #else
  255. return EREMOTE
  256. #endif
  257. }
  258. #endif
  259. #if SYSTEM_PACKAGE_DARWIN
  260. @_alwaysEmitIntoClient
  261. internal var _EBADRPC: CInt { EBADRPC }
  262. @_alwaysEmitIntoClient
  263. internal var _ERPCMISMATCH: CInt { ERPCMISMATCH }
  264. @_alwaysEmitIntoClient
  265. internal var _EPROGUNAVAIL: CInt { EPROGUNAVAIL }
  266. @_alwaysEmitIntoClient
  267. internal var _EPROGMISMATCH: CInt { EPROGMISMATCH }
  268. @_alwaysEmitIntoClient
  269. internal var _EPROCUNAVAIL: CInt { EPROCUNAVAIL }
  270. #endif
  271. @_alwaysEmitIntoClient
  272. internal var _ENOLCK: CInt { ENOLCK }
  273. @_alwaysEmitIntoClient
  274. internal var _ENOSYS: CInt { ENOSYS }
  275. #if SYSTEM_PACKAGE_DARWIN || os(FreeBSD)
  276. @_alwaysEmitIntoClient
  277. internal var _EFTYPE: CInt { EFTYPE }
  278. @_alwaysEmitIntoClient
  279. internal var _EAUTH: CInt { EAUTH }
  280. @_alwaysEmitIntoClient
  281. internal var _ENEEDAUTH: CInt { ENEEDAUTH }
  282. #endif
  283. #if SYSTEM_PACKAGE_DARWIN
  284. @_alwaysEmitIntoClient
  285. internal var _EPWROFF: CInt { EPWROFF }
  286. @_alwaysEmitIntoClient
  287. internal var _EDEVERR: CInt { EDEVERR }
  288. #endif
  289. #if !os(Windows)
  290. @_alwaysEmitIntoClient
  291. internal var _EOVERFLOW: CInt { EOVERFLOW }
  292. #endif
  293. #if SYSTEM_PACKAGE_DARWIN
  294. @_alwaysEmitIntoClient
  295. internal var _EBADEXEC: CInt { EBADEXEC }
  296. @_alwaysEmitIntoClient
  297. internal var _EBADARCH: CInt { EBADARCH }
  298. @_alwaysEmitIntoClient
  299. internal var _ESHLIBVERS: CInt { ESHLIBVERS }
  300. @_alwaysEmitIntoClient
  301. internal var _EBADMACHO: CInt { EBADMACHO }
  302. #endif
  303. @_alwaysEmitIntoClient
  304. internal var _ECANCELED: CInt { ECANCELED }
  305. #if !os(Windows)
  306. @_alwaysEmitIntoClient
  307. internal var _EIDRM: CInt { EIDRM }
  308. @_alwaysEmitIntoClient
  309. internal var _ENOMSG: CInt { ENOMSG }
  310. #endif
  311. @_alwaysEmitIntoClient
  312. internal var _EILSEQ: CInt { EILSEQ }
  313. #if SYSTEM_PACKAGE_DARWIN || os(FreeBSD)
  314. @_alwaysEmitIntoClient
  315. internal var _ENOATTR: CInt { ENOATTR }
  316. #endif
  317. #if !os(Windows)
  318. @_alwaysEmitIntoClient
  319. internal var _EBADMSG: CInt { EBADMSG }
  320. #if !os(OpenBSD)
  321. @_alwaysEmitIntoClient
  322. internal var _EMULTIHOP: CInt { EMULTIHOP }
  323. #if !os(WASI) && !os(FreeBSD)
  324. @_alwaysEmitIntoClient
  325. internal var _ENODATA: CInt { ENODATA }
  326. #endif
  327. @_alwaysEmitIntoClient
  328. internal var _ENOLINK: CInt { ENOLINK }
  329. #if !os(WASI) && !os(FreeBSD)
  330. @_alwaysEmitIntoClient
  331. internal var _ENOSR: CInt { ENOSR }
  332. @_alwaysEmitIntoClient
  333. internal var _ENOSTR: CInt { ENOSTR }
  334. #endif
  335. #endif
  336. @_alwaysEmitIntoClient
  337. internal var _EPROTO: CInt { EPROTO }
  338. #if !os(OpenBSD) && !os(WASI) && !os(FreeBSD)
  339. @_alwaysEmitIntoClient
  340. internal var _ETIME: CInt { ETIME }
  341. #endif
  342. #endif
  343. @_alwaysEmitIntoClient
  344. internal var _EOPNOTSUPP: CInt {
  345. #if os(WASI)
  346. _getConst_EOPNOTSUPP()
  347. #else
  348. EOPNOTSUPP
  349. #endif
  350. }
  351. #if SYSTEM_PACKAGE_DARWIN
  352. @_alwaysEmitIntoClient
  353. internal var _ENOPOLICY: CInt { ENOPOLICY }
  354. #endif
  355. #if !os(Windows)
  356. @_alwaysEmitIntoClient
  357. internal var _ENOTRECOVERABLE: CInt { ENOTRECOVERABLE }
  358. @_alwaysEmitIntoClient
  359. internal var _EOWNERDEAD: CInt { EOWNERDEAD }
  360. #endif
  361. #if os(FreeBSD)
  362. @_alwaysEmitIntoClient
  363. internal var _ENOTCAPABLE: CInt { ENOTCAPABLE }
  364. @_alwaysEmitIntoClient
  365. internal var _ECAPMODE: CInt { ECAPMODE }
  366. @_alwaysEmitIntoClient
  367. internal var _EINTEGRITY: CInt { EINTEGRITY }
  368. #endif
  369. #if SYSTEM_PACKAGE_DARWIN
  370. @_alwaysEmitIntoClient
  371. internal var _EQFULL: CInt { EQFULL }
  372. #endif
  373. #if SYSTEM_PACKAGE_DARWIN || os(FreeBSD)
  374. @_alwaysEmitIntoClient
  375. internal var _ELAST: CInt { ELAST }
  376. #endif
  377. // MARK: File Operations
  378. @_alwaysEmitIntoClient
  379. internal var _O_RDONLY: CInt { O_RDONLY }
  380. @_alwaysEmitIntoClient
  381. internal var _O_WRONLY: CInt { O_WRONLY }
  382. @_alwaysEmitIntoClient
  383. internal var _O_RDWR: CInt { O_RDWR }
  384. #if !os(Windows)
  385. #if canImport(Musl)
  386. internal var _O_ACCMODE: CInt { 0x03|O_SEARCH }
  387. #else
  388. // TODO: API?
  389. @_alwaysEmitIntoClient
  390. internal var _O_ACCMODE: CInt {
  391. #if os(WASI)
  392. _getConst_O_ACCMODE()
  393. #else
  394. O_ACCMODE
  395. #endif
  396. }
  397. #endif
  398. @_alwaysEmitIntoClient
  399. internal var _O_NONBLOCK: CInt {
  400. #if os(WASI)
  401. _getConst_O_NONBLOCK()
  402. #else
  403. O_NONBLOCK
  404. #endif
  405. }
  406. #endif
  407. @_alwaysEmitIntoClient
  408. internal var _O_APPEND: CInt {
  409. #if os(WASI)
  410. _getConst_O_APPEND()
  411. #else
  412. O_APPEND
  413. #endif
  414. }
  415. #if SYSTEM_PACKAGE_DARWIN || os(FreeBSD)
  416. @_alwaysEmitIntoClient
  417. internal var _O_SHLOCK: CInt { O_SHLOCK }
  418. @_alwaysEmitIntoClient
  419. internal var _O_EXLOCK: CInt { O_EXLOCK }
  420. #endif
  421. #if !os(Windows)
  422. #if !os(WASI)
  423. // TODO: API?
  424. @_alwaysEmitIntoClient
  425. internal var _O_ASYNC: CInt { O_ASYNC }
  426. #endif
  427. @_alwaysEmitIntoClient
  428. internal var _O_NOFOLLOW: CInt { O_NOFOLLOW }
  429. #endif
  430. #if os(FreeBSD)
  431. @_alwaysEmitIntoClient
  432. internal var _O_FSYNC: CInt { O_FSYNC }
  433. @_alwaysEmitIntoClient
  434. internal var _O_SYNC: CInt { O_SYNC }
  435. #endif
  436. @_alwaysEmitIntoClient
  437. internal var _O_CREAT: CInt {
  438. #if os(WASI)
  439. _getConst_O_CREAT()
  440. #else
  441. O_CREAT
  442. #endif
  443. }
  444. @_alwaysEmitIntoClient
  445. internal var _O_TRUNC: CInt {
  446. #if os(WASI)
  447. _getConst_O_TRUNC()
  448. #else
  449. O_TRUNC
  450. #endif
  451. }
  452. @_alwaysEmitIntoClient
  453. internal var _O_EXCL: CInt {
  454. #if os(WASI)
  455. _getConst_O_EXCL()
  456. #else
  457. O_EXCL
  458. #endif
  459. }
  460. #if SYSTEM_PACKAGE_DARWIN
  461. @_alwaysEmitIntoClient
  462. internal var _O_EVTONLY: CInt { O_EVTONLY }
  463. #endif
  464. #if !os(Windows)
  465. // TODO: API?
  466. @_alwaysEmitIntoClient
  467. internal var _O_NOCTTY: CInt { O_NOCTTY }
  468. @_alwaysEmitIntoClient
  469. internal var _O_DIRECTORY: CInt {
  470. #if os(WASI)
  471. _getConst_O_DIRECTORY()
  472. #else
  473. O_DIRECTORY
  474. #endif
  475. }
  476. #endif
  477. #if SYSTEM_PACKAGE_DARWIN
  478. @_alwaysEmitIntoClient
  479. internal var _O_SYMLINK: CInt { O_SYMLINK }
  480. #endif
  481. @_alwaysEmitIntoClient
  482. internal var _O_CLOEXEC: CInt {
  483. #if os(Windows)
  484. O_NOINHERIT
  485. #else
  486. O_CLOEXEC
  487. #endif
  488. }
  489. #if !os(Windows)
  490. @_alwaysEmitIntoClient
  491. internal var _O_CLOFORK: CInt {
  492. #if SYSTEM_PACKAGE_DARWIN || os(FreeBSD)
  493. COMPATIBILITY_O_CLOFORK
  494. #elseif !os(WASI) && !os(Linux) && !os(Android)
  495. O_CLOFORK
  496. #else
  497. 0
  498. #endif
  499. }
  500. #endif
  501. @_alwaysEmitIntoClient
  502. internal var _SEEK_SET: CInt { SEEK_SET }
  503. @_alwaysEmitIntoClient
  504. internal var _SEEK_CUR: CInt { SEEK_CUR }
  505. @_alwaysEmitIntoClient
  506. internal var _SEEK_END: CInt { SEEK_END }
  507. #if SYSTEM_PACKAGE_DARWIN || os(FreeBSD)
  508. @_alwaysEmitIntoClient
  509. internal var _SEEK_HOLE: CInt { SEEK_HOLE }
  510. @_alwaysEmitIntoClient
  511. internal var _SEEK_DATA: CInt { SEEK_DATA }
  512. #endif
  513. // MARK: - File System
  514. #if !os(Windows)
  515. @_alwaysEmitIntoClient
  516. internal var _AT_FDCWD: CInt { AT_FDCWD }
  517. // MARK: - fstatat Flags
  518. @_alwaysEmitIntoClient
  519. internal var _AT_SYMLINK_NOFOLLOW: CInt { AT_SYMLINK_NOFOLLOW }
  520. #if SYSTEM_PACKAGE_DARWIN
  521. @_alwaysEmitIntoClient
  522. internal var _AT_SYMLINK_NOFOLLOW_ANY: CInt { AT_SYMLINK_NOFOLLOW_ANY }
  523. #endif
  524. #if canImport(Darwin, _version: 346) || os(FreeBSD)
  525. @_alwaysEmitIntoClient
  526. internal var _AT_RESOLVE_BENEATH: CInt { AT_RESOLVE_BENEATH }
  527. #endif
  528. // MARK: - File Mode / File Type
  529. @_alwaysEmitIntoClient
  530. internal var _MODE_FILETYPE_MASK: mode_t { S_IFMT }
  531. @_alwaysEmitIntoClient
  532. internal var _MODE_PERMISSIONS_MASK: mode_t { 0o7777 }
  533. @_alwaysEmitIntoClient
  534. internal var _S_IFDIR: mode_t { S_IFDIR }
  535. @_alwaysEmitIntoClient
  536. internal var _S_IFCHR: mode_t { S_IFCHR }
  537. @_alwaysEmitIntoClient
  538. internal var _S_IFBLK: mode_t { S_IFBLK }
  539. @_alwaysEmitIntoClient
  540. internal var _S_IFREG: mode_t { S_IFREG }
  541. @_alwaysEmitIntoClient
  542. internal var _S_IFIFO: mode_t { S_IFIFO }
  543. @_alwaysEmitIntoClient
  544. internal var _S_IFLNK: mode_t { S_IFLNK }
  545. @_alwaysEmitIntoClient
  546. internal var _S_IFSOCK: mode_t { S_IFSOCK }
  547. #if SYSTEM_PACKAGE_DARWIN || os(FreeBSD)
  548. // `S_IFWHT` is `Int32` on FreeBSD.
  549. @_alwaysEmitIntoClient
  550. internal var _S_IFWHT: mode_t { .init(S_IFWHT) }
  551. #endif
  552. // MARK: - stat/chflags File Flags
  553. // MARK: Flags Available on Darwin, FreeBSD, and OpenBSD
  554. #if SYSTEM_PACKAGE_DARWIN || os(FreeBSD) || os(OpenBSD)
  555. @_alwaysEmitIntoClient
  556. internal var _UF_NODUMP: UInt32 { UInt32(bitPattern: UF_NODUMP) }
  557. @_alwaysEmitIntoClient
  558. internal var _UF_IMMUTABLE: UInt32 { UInt32(bitPattern: UF_IMMUTABLE) }
  559. @_alwaysEmitIntoClient
  560. internal var _UF_APPEND: UInt32 { UInt32(bitPattern: UF_APPEND) }
  561. @_alwaysEmitIntoClient
  562. internal var _SF_ARCHIVED: UInt32 { UInt32(bitPattern: SF_ARCHIVED) }
  563. @_alwaysEmitIntoClient
  564. internal var _SF_IMMUTABLE: UInt32 { UInt32(bitPattern: SF_IMMUTABLE) }
  565. @_alwaysEmitIntoClient
  566. internal var _SF_APPEND: UInt32 { UInt32(bitPattern: SF_APPEND) }
  567. #endif
  568. // MARK: Flags Available on Darwin and FreeBSD
  569. #if SYSTEM_PACKAGE_DARWIN || os(FreeBSD)
  570. @_alwaysEmitIntoClient
  571. internal var _UF_OPAQUE: UInt32 { UInt32(bitPattern: UF_OPAQUE) }
  572. @_alwaysEmitIntoClient
  573. internal var _UF_HIDDEN: UInt32 { UInt32(bitPattern: UF_HIDDEN) }
  574. @_alwaysEmitIntoClient
  575. internal var _SF_NOUNLINK: UInt32 { UInt32(bitPattern: SF_NOUNLINK) }
  576. #endif
  577. // MARK: Flags Available on Darwin Only
  578. #if SYSTEM_PACKAGE_DARWIN
  579. @_alwaysEmitIntoClient
  580. internal var _UF_COMPRESSED: UInt32 { UInt32(bitPattern: UF_COMPRESSED) }
  581. @_alwaysEmitIntoClient
  582. internal var _UF_TRACKED: UInt32 { UInt32(bitPattern: UF_TRACKED) }
  583. @_alwaysEmitIntoClient
  584. internal var _UF_DATAVAULT: UInt32 { UInt32(bitPattern: UF_DATAVAULT) }
  585. @_alwaysEmitIntoClient
  586. internal var _SF_RESTRICTED: UInt32 { UInt32(bitPattern: SF_RESTRICTED) }
  587. @_alwaysEmitIntoClient
  588. internal var _SF_FIRMLINK: UInt32 { UInt32(bitPattern: SF_FIRMLINK) }
  589. @_alwaysEmitIntoClient
  590. internal var _SF_DATALESS: UInt32 { UInt32(bitPattern: SF_DATALESS) }
  591. #endif
  592. // MARK: Flags Available on FreeBSD Only
  593. #if os(FreeBSD)
  594. @_alwaysEmitIntoClient
  595. internal var _UF_NOUNLINK: UInt32 { UInt32(bitPattern: UF_NOUNLINK) }
  596. @_alwaysEmitIntoClient
  597. internal var _UF_OFFLINE: UInt32 { UInt32(bitPattern: UF_OFFLINE) }
  598. @_alwaysEmitIntoClient
  599. internal var _UF_READONLY: UInt32 { UInt32(bitPattern: UF_READONLY) }
  600. @_alwaysEmitIntoClient
  601. internal var _UF_REPARSE: UInt32 { UInt32(bitPattern: UF_REPARSE) }
  602. @_alwaysEmitIntoClient
  603. internal var _UF_SPARSE: UInt32 { UInt32(bitPattern: UF_SPARSE) }
  604. @_alwaysEmitIntoClient
  605. internal var _UF_SYSTEM: UInt32 { UInt32(bitPattern: UF_SYSTEM) }
  606. @_alwaysEmitIntoClient
  607. internal var _SF_SNAPSHOT: UInt32 { UInt32(bitPattern: SF_SNAPSHOT) }
  608. #endif
  609. #endif // !os(Windows)