{-# LINE 1 "System/Posix/Files/Common.hsc" #-}{-# LINE 2 "System/Posix/Files/Common.hsc" #-}{-# LANGUAGE Trustworthy #-}{-# LINE 4 "System/Posix/Files/Common.hsc" #-}------------------------------------------------------------------------------- |-- Module : System.Posix.Files.Common-- Copyright : (c) The University of Glasgow 2002-- License : BSD-style (see the file libraries/base/LICENSE)---- Maintainer : libraries@haskell.org-- Stability : provisional-- Portability : non-portable (requires POSIX)---- Functions defined by the POSIX standards for manipulating and querying the-- file system. Names of underlying POSIX functions are indicated whenever-- possible. A more complete documentation of the POSIX functions together-- with a more detailed description of different error conditions are usually-- available in the system's manual pages or from-- <http://www.unix.org/version3/online.html> (free registration required).---- When a function that calls an underlying POSIX function fails, the errno-- code is converted to an 'IOError' using 'Foreign.C.Error.errnoToIOError'.-- For a list of which errno codes may be generated, consult the POSIX-- documentation for the underlying function.-------------------------------------------------------------------------------{-# LINE 29 "System/Posix/Files/Common.hsc" #-}moduleSystem. Posix.Files.Common(-- * File modes-- FileMode exported by System.Posix.TypesunionFileModes,intersectFileModes,nullFileMode ,ownerReadMode,ownerWriteMode,ownerExecuteMode,ownerModes,groupReadMode ,groupWriteMode,groupExecuteMode,groupModes,otherReadMode ,otherWriteMode,otherExecuteMode,otherModes,setUserIDMode ,setGroupIDMode ,stdFileMode,accessModes,fileTypeModes,blockSpecialMode,characterSpecialMode,namedPipeMode,regularFileMode,directoryMode,symbolicLinkMode,socketMode,-- ** Setting file modessetFdMode,setFileCreationMask,-- * File statusFileStatus(..),-- ** Obtaining file statusgetFdStatus ,-- ** Querying file statusdeviceID ,fileID,fileMode,linkCount,fileOwner,fileGroup,specialDeviceID,fileSize ,accessTime,modificationTime,statusChangeTime,accessTimeHiRes,modificationTimeHiRes,statusChangeTimeHiRes,setFdTimesHiRes,touchFd,isBlockDevice,isCharacterDevice,isNamedPipe,isRegularFile,isDirectory,isSymbolicLink,isSocket,-- * Setting file sizessetFdSize,-- * Changing file ownershipsetFdOwnerAndGroup,-- * Find system-specific limits for a filePathVar (..),getFdPathVar,pathVarConst,-- * Low level types and functions{-# LINE 71 "System/Posix/Files/Common.hsc" #-}CTimeSpec (..),toCTimeSpec,c_utimensat,{-# LINE 75 "System/Posix/Files/Common.hsc" #-}CTimeVal(..),toCTimeVal,c_utimes,{-# LINE 79 "System/Posix/Files/Common.hsc" #-}c_lutimes,{-# LINE 81 "System/Posix/Files/Common.hsc" #-})whereimportSystem.Posix.TypesimportSystem.IO.UnsafeimportData.Bits{-# LINE 92 "System/Posix/Files/Common.hsc" #-}importData.IntimportData.Ratio{-# LINE 95 "System/Posix/Files/Common.hsc" #-}importData.Time.Clock.POSIX(POSIXTime)importSystem.Posix.InternalsimportForeign.CimportForeign.ForeignPtr{-# LINE 100 "System/Posix/Files/Common.hsc" #-}importForeign.Marshal(withArray){-# LINE 102 "System/Posix/Files/Common.hsc" #-}importForeign.PtrimportForeign.Storable-- ------------------------------------------------------------------------------- POSIX file modes-- The abstract type 'FileMode', constants and operators for-- manipulating the file modes defined by POSIX.-- | No permissions.nullFileMode::FileModenullFileMode=0-- | Owner has read permission.ownerReadMode::FileModeownerReadMode=(256){-# LINE 118 "System/Posix/Files/Common.hsc" #-}-- | Owner has write permission.ownerWriteMode::FileModeownerWriteMode=(128){-# LINE 122 "System/Posix/Files/Common.hsc" #-}-- | Owner has execute permission.ownerExecuteMode::FileModeownerExecuteMode=(64){-# LINE 126 "System/Posix/Files/Common.hsc" #-}-- | Group has read permission.groupReadMode::FileModegroupReadMode=(32){-# LINE 130 "System/Posix/Files/Common.hsc" #-}-- | Group has write permission.groupWriteMode::FileModegroupWriteMode=(16){-# LINE 134 "System/Posix/Files/Common.hsc" #-}-- | Group has execute permission.groupExecuteMode::FileModegroupExecuteMode =(8){-# LINE 138 "System/Posix/Files/Common.hsc" #-}-- | Others have read permission.otherReadMode ::FileModeotherReadMode=(4){-# LINE 142 "System/Posix/Files/Common.hsc" #-}-- | Others have write permission.otherWriteMode::FileModeotherWriteMode=(2){-# LINE 146 "System/Posix/Files/Common.hsc" #-}-- | Others have execute permission.otherExecuteMode::FileModeotherExecuteMode=(1){-# LINE 150 "System/Posix/Files/Common.hsc" #-}-- | Set user ID on execution.setUserIDMode::FileModesetUserIDMode=(2048){-# LINE 154 "System/Posix/Files/Common.hsc" #-}-- | Set group ID on execution.setGroupIDMode::FileModesetGroupIDMode=(1024){-# LINE 158 "System/Posix/Files/Common.hsc" #-}-- | Owner, group and others have read and write permission.stdFileMode::FileModestdFileMode =ownerReadMode.|. ownerWriteMode.|. groupReadMode.|.groupWriteMode.|.otherReadMode.|.otherWriteMode-- | Owner has read, write and execute permission.ownerModes ::FileModeownerModes=(448){-# LINE 168 "System/Posix/Files/Common.hsc" #-}-- | Group has read, write and execute permission.groupModes ::FileModegroupModes=(56){-# LINE 172 "System/Posix/Files/Common.hsc" #-}-- | Others have read, write and execute permission.otherModes::FileModeotherModes =(7){-# LINE 176 "System/Posix/Files/Common.hsc" #-}-- | Owner, group and others have read, write and execute permission.accessModes::FileModeaccessModes=ownerModes.|.groupModes.|.otherModes-- | Combines the two file modes into one that contains modes that appear in-- either.unionFileModes ::FileMode->FileMode->FileModeunionFileModesm1m2=m1.|.m2-- | Combines two file modes into one that only contains modes that appear in-- both.intersectFileModes::FileMode->FileMode->FileModeintersectFileModesm1m2=m1.&.m2fileTypeModes::FileModefileTypeModes=(61440){-# LINE 193 "System/Posix/Files/Common.hsc" #-}blockSpecialMode::FileModeblockSpecialMode=(24576){-# LINE 196 "System/Posix/Files/Common.hsc" #-}characterSpecialMode::FileModecharacterSpecialMode=(8192){-# LINE 199 "System/Posix/Files/Common.hsc" #-}namedPipeMode::FileModenamedPipeMode=(4096){-# LINE 202 "System/Posix/Files/Common.hsc" #-}regularFileMode::FileModeregularFileMode=(32768){-# LINE 205 "System/Posix/Files/Common.hsc" #-}directoryMode ::FileModedirectoryMode=(16384){-# LINE 208 "System/Posix/Files/Common.hsc" #-}symbolicLinkMode::FileModesymbolicLinkMode=(40960){-# LINE 211 "System/Posix/Files/Common.hsc" #-}socketMode::FileModesocketMode=(49152){-# LINE 214 "System/Posix/Files/Common.hsc" #-}-- | @setFdMode fd mode@ acts like 'setFileMode' but uses a file descriptor-- @fd@ instead of a 'FilePath'.---- Note: calls @fchmod@.setFdMode::Fd->FileMode->IO()setFdMode(Fdfd)m=throwErrnoIfMinus1_"setFdMode"(c_fchmodfdm)foreignimportccallunsafe"fchmod"c_fchmod::CInt->CMode ->IOCInt-- | @setFileCreationMask mode@ sets the file mode creation mask to @mode@.-- Modes set by this operation are subtracted from files and directories upon-- creation. The previous file creation mask is returned.---- Note: calls @umask@.setFileCreationMask::FileMode->IOFileModesetFileCreationMaskmask=c_umaskmask-- ------------------------------------------------------------------------------- stat() support-- | POSIX defines operations to get information, such as owner, permissions,-- size and access times, about a file. This information is represented by the-- 'FileStatus' type.---- Note: see @chmod@.newtypeFileStatus=FileStatus(ForeignPtrCStat)-- | ID of the device on which this file resides.deviceID ::FileStatus->DeviceID-- | inode numberfileID ::FileStatus->FileID-- | File mode (such as permissions).fileMode ::FileStatus->FileMode-- | Number of hard links to this file.linkCount ::FileStatus->LinkCount-- | ID of owner.fileOwner ::FileStatus->UserID-- | ID of group.fileGroup ::FileStatus->GroupID-- | Describes the device that this file represents.specialDeviceID ::FileStatus->DeviceID-- | Size of the file in bytes. If this file is a symbolic link the size is-- the length of the pathname it contains.fileSize::FileStatus->FileOffset-- | Time of last access.accessTime::FileStatus->EpochTime-- | Time of last access in sub-second resolution.accessTimeHiRes::FileStatus->POSIXTime-- | Time of last modification.modificationTime::FileStatus->EpochTime-- | Time of last modification in sub-second resolution.modificationTimeHiRes::FileStatus->POSIXTime-- | Time of last status change (i.e. owner, group, link count, mode, etc.).statusChangeTime::FileStatus->EpochTime-- | Time of last status change (i.e. owner, group, link count, mode, etc.) in sub-second resolution.statusChangeTimeHiRes::FileStatus->POSIXTimedeviceID(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr0)){-# LINE 276 "System/Posix/Files/Common.hsc" #-}fileID(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr8)){-# LINE 278 "System/Posix/Files/Common.hsc" #-}fileMode(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr24)){-# LINE 280 "System/Posix/Files/Common.hsc" #-}linkCount(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr16)){-# LINE 282 "System/Posix/Files/Common.hsc" #-}fileOwner(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr28)){-# LINE 284 "System/Posix/Files/Common.hsc" #-}fileGroup(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr32)){-# LINE 286 "System/Posix/Files/Common.hsc" #-}specialDeviceID(FileStatusstat)=unsafePerformIO$ withForeignPtrstat$ ((\hsc_ptr->peekByteOffhsc_ptr40)){-# LINE 288 "System/Posix/Files/Common.hsc" #-}fileSize(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr48)){-# LINE 290 "System/Posix/Files/Common.hsc" #-}accessTime(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr72)){-# LINE 292 "System/Posix/Files/Common.hsc" #-}modificationTime(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr88)){-# LINE 294 "System/Posix/Files/Common.hsc" #-}statusChangeTime(FileStatusstat)=unsafePerformIO$withForeignPtrstat$((\hsc_ptr->peekByteOffhsc_ptr104)){-# LINE 296 "System/Posix/Files/Common.hsc" #-}accessTimeHiRes(FileStatusstat)=unsafePerformIO$withForeignPtrstat$\stat_ptr->dosec<-((\hsc_ptr->peekByteOffhsc_ptr72))stat_ptr::IOEpochTime{-# LINE 300 "System/Posix/Files/Common.hsc" #-}{-# LINE 301 "System/Posix/Files/Common.hsc" #-}nsec <-((\hsc_ptr->peekByteOffhsc_ptr80))stat_ptr::IO(Int64){-# LINE 302 "System/Posix/Files/Common.hsc" #-}letfrac=toIntegernsec%10^(9::Int ){-# LINE 318 "System/Posix/Files/Common.hsc" #-}return$ fromRational$ toRationalsec+fracmodificationTimeHiRes(FileStatusstat)=unsafePerformIO$withForeignPtrstat$\stat_ptr->dosec<-((\hsc_ptr->peekByteOffhsc_ptr88))stat_ptr::IOEpochTime{-# LINE 323 "System/Posix/Files/Common.hsc" #-}{-# LINE 324 "System/Posix/Files/Common.hsc" #-}nsec<-((\hsc_ptr->peekByteOffhsc_ptr96))stat_ptr::IO(Int64){-# LINE 325 "System/Posix/Files/Common.hsc" #-}letfrac=toIntegernsec%10^(9::Int){-# LINE 341 "System/Posix/Files/Common.hsc" #-}return$fromRational$toRationalsec+fracstatusChangeTimeHiRes(FileStatusstat)=unsafePerformIO$withForeignPtrstat$ \stat_ptr->dosec<-((\hsc_ptr->peekByteOffhsc_ptr104))stat_ptr::IOEpochTime{-# LINE 346 "System/Posix/Files/Common.hsc" #-}{-# LINE 347 "System/Posix/Files/Common.hsc" #-}nsec<-((\hsc_ptr->peekByteOffhsc_ptr112))stat_ptr::IO(Int64){-# LINE 348 "System/Posix/Files/Common.hsc" #-}letfrac=toIntegernsec % 10^(9::Int){-# LINE 364 "System/Posix/Files/Common.hsc" #-}return$fromRational$toRationalsec+frac-- | Checks if this file is a block device.isBlockDevice::FileStatus ->Bool-- | Checks if this file is a character device.isCharacterDevice::FileStatus ->Bool-- | Checks if this file is a named pipe device.isNamedPipe ::FileStatus->Bool-- | Checks if this file is a regular file device.isRegularFile ::FileStatus->Bool-- | Checks if this file is a directory device.isDirectory ::FileStatus->Bool-- | Checks if this file is a symbolic link device.isSymbolicLink::FileStatus->Bool-- | Checks if this file is a socket device.isSocket ::FileStatus->BoolisBlockDevice stat=(fileMode stat `intersectFileModes `fileTypeModes )==blockSpecialMode isCharacterDevicestat=(fileMode stat `intersectFileModes `fileTypeModes )==characterSpecialModeisNamedPipestat=(fileModestat`intersectFileModes`fileTypeModes)==namedPipeModeisRegularFilestat=(fileModestat`intersectFileModes`fileTypeModes)==regularFileModeisDirectorystat=(fileMode stat`intersectFileModes`fileTypeModes)==directoryModeisSymbolicLinkstat=(fileModestat`intersectFileModes`fileTypeModes)==symbolicLinkModeisSocketstat=(fileModestat `intersectFileModes`fileTypeModes)==socketMode-- | @getFdStatus fd@ acts as 'getFileStatus' but uses a file descriptor @fd@.---- Note: calls @fstat@.getFdStatus::Fd->IOFileStatusgetFdStatus(Fdfd)=dofp<-mallocForeignPtrBytes(144){-# LINE 402 "System/Posix/Files/Common.hsc" #-}withForeignPtrfp$\p->throwErrnoIfMinus1_"getFdStatus"(c_fstatfdp)return(FileStatusfp)-- ------------------------------------------------------------------------------- Setting file times{-# LINE 410 "System/Posix/Files/Common.hsc" #-}dataCTimeSpec=CTimeSpecEpochTimeCLonginstanceStorableCTimeSpecwheresizeOf_=(16){-# LINE 414 "System/Posix/Files/Common.hsc" #-}alignment_ =alignment(undefined::CInt)pokep(CTimeSpecsecnsec)=do((\hsc_ptr->pokeByteOffhsc_ptr0))psec{-# LINE 417 "System/Posix/Files/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr8))pnsec{-# LINE 418 "System/Posix/Files/Common.hsc" #-}peekp=dosec<-(\hsc_ptr->peekByteOffhsc_ptr0)p{-# LINE 420 "System/Posix/Files/Common.hsc" #-}nsec<-(\hsc_ptr->peekByteOffhsc_ptr8)p{-# LINE 421 "System/Posix/Files/Common.hsc" #-}return$CTimeSpecsecnsectoCTimeSpec::POSIXTime->CTimeSpectoCTimeSpect=CTimeSpec(CTimesec)(truncate$10^(9::Int)*frac)where(sec ,frac)=if(frac'<0)then(sec'-1,frac'+1)else(sec',frac')(sec' ,frac')=properFraction$toRationalt{-# LINE 429 "System/Posix/Files/Common.hsc" #-}{-# LINE 431 "System/Posix/Files/Common.hsc" #-}foreignimportccallunsafe"utimensat"c_utimensat::CInt ->CString->PtrCTimeSpec->CInt->IOCInt{-# LINE 434 "System/Posix/Files/Common.hsc" #-}{-# LINE 436 "System/Posix/Files/Common.hsc" #-}foreignimportccallunsafe"futimens"c_futimens::CInt->PtrCTimeSpec->IOCInt{-# LINE 439 "System/Posix/Files/Common.hsc" #-}dataCTimeVal=CTimeValCLongCLonginstanceStorableCTimeValwheresizeOf_=(16){-# LINE 444 "System/Posix/Files/Common.hsc" #-}alignment_=alignment(undefined::CInt)pokep(CTimeValsecusec)=do((\hsc_ptr->pokeByteOffhsc_ptr0))psec{-# LINE 447 "System/Posix/Files/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr8))pusec{-# LINE 448 "System/Posix/Files/Common.hsc" #-}peekp=dosec<-(\hsc_ptr->peekByteOffhsc_ptr0)p{-# LINE 450 "System/Posix/Files/Common.hsc" #-}usec<-(\hsc_ptr->peekByteOffhsc_ptr8)p{-# LINE 451 "System/Posix/Files/Common.hsc" #-}return$CTimeValsecusectoCTimeVal::POSIXTime->CTimeValtoCTimeVal t =CTimeValsec (truncate$10^(6::Int)*frac)where(sec,frac)=if(frac'<0)then(sec'-1,frac'+ 1)else(sec',frac')(sec',frac')=properFraction$toRationaltforeignimportccallunsafe"utimes"c_utimes::CString->PtrCTimeVal->IOCInt{-# LINE 463 "System/Posix/Files/Common.hsc" #-}foreignimportccallunsafe"lutimes"c_lutimes::CString->PtrCTimeVal->IOCInt{-# LINE 466 "System/Posix/Files/Common.hsc" #-}{-# LINE 468 "System/Posix/Files/Common.hsc" #-}foreignimportccallunsafe"futimes"c_futimes::CInt->PtrCTimeVal->IOCInt{-# LINE 471 "System/Posix/Files/Common.hsc" #-}-- | Like 'setFileTimesHiRes' but uses a file descriptor instead of a path.-- This operation is not supported on all platforms. On these platforms,-- this function will raise an exception.---- Note: calls @futimens@ or @futimes@.---- /Since: 2.7.0.0/setFdTimesHiRes::Fd->POSIXTime->POSIXTime->IO(){-# LINE 481 "System/Posix/Files/Common.hsc" #-}setFdTimesHiRes(Fdfd)atimemtime=withArray[toCTimeSpecatime,toCTimeSpecmtime]$\times->throwErrnoIfMinus1_"setFdTimesHiRes"(c_futimensfdtimes){-# LINE 492 "System/Posix/Files/Common.hsc" #-}-- | Like 'touchFile' but uses a file descriptor instead of a path.-- This operation is not supported on all platforms. On these platforms,-- this function will raise an exception.---- Note: calls @futimes@.---- /Since: 2.7.0.0/touchFd::Fd->IO(){-# LINE 502 "System/Posix/Files/Common.hsc" #-}touchFd(Fdfd)=throwErrnoIfMinus1_"touchFd"(c_futimesfdnullPtr){-# LINE 508 "System/Posix/Files/Common.hsc" #-}-- ------------------------------------------------------------------------------- fchown()-- | Acts as 'setOwnerAndGroup' but uses a file descriptor instead of a-- 'FilePath'.---- Note: calls @fchown@.setFdOwnerAndGroup::Fd->UserID->GroupID->IO()setFdOwnerAndGroup(Fdfd)uidgid=throwErrnoIfMinus1_"setFdOwnerAndGroup"(c_fchownfduidgid)foreignimportccallunsafe"fchown"c_fchown::CInt->CUid->CGid->IOCInt-- ------------------------------------------------------------------------------- ftruncate()-- | Acts as 'setFileSize' but uses a file descriptor instead of a 'FilePath'.---- Note: calls @ftruncate@.setFdSize::Fd ->FileOffset->IO()setFdSize(Fd fd )off=throwErrnoIfMinus1_"setFdSize"(c_ftruncatefdoff)-- ------------------------------------------------------------------------------- pathconf()/fpathconf() supportdataPathVar=FileSizeBits{- _PC_FILESIZEBITS -}|LinkLimit{- _PC_LINK_MAX -}|InputLineLimit{- _PC_MAX_CANON -}|InputQueueLimit{- _PC_MAX_INPUT -}|FileNameLimit{- _PC_NAME_MAX -}|PathNameLimit{- _PC_PATH_MAX -}|PipeBufferLimit{- _PC_PIPE_BUF -}-- These are described as optional in POSIX:{- _PC_ALLOC_SIZE_MIN -}{- _PC_REC_INCR_XFER_SIZE -}{- _PC_REC_MAX_XFER_SIZE -}{- _PC_REC_MIN_XFER_SIZE -}{- _PC_REC_XFER_ALIGN -}|SymbolicLinkLimit{- _PC_SYMLINK_MAX -}|SetOwnerAndGroupIsRestricted{- _PC_CHOWN_RESTRICTED -}|FileNamesAreNotTruncated{- _PC_NO_TRUNC -}|VDisableChar{- _PC_VDISABLE -}|AsyncIOAvailable{- _PC_ASYNC_IO -}|PrioIOAvailable{- _PC_PRIO_IO -}|SyncIOAvailable{- _PC_SYNC_IO -}pathVarConst::PathVar ->CIntpathVarConstv=casevofLinkLimit->(0){-# LINE 561 "System/Posix/Files/Common.hsc" #-}InputLineLimit->(1){-# LINE 562 "System/Posix/Files/Common.hsc" #-}InputQueueLimit->(2){-# LINE 563 "System/Posix/Files/Common.hsc" #-}FileNameLimit->(3){-# LINE 564 "System/Posix/Files/Common.hsc" #-}PathNameLimit->(4){-# LINE 565 "System/Posix/Files/Common.hsc" #-}PipeBufferLimit->(5){-# LINE 566 "System/Posix/Files/Common.hsc" #-}SetOwnerAndGroupIsRestricted->(6){-# LINE 567 "System/Posix/Files/Common.hsc" #-}FileNamesAreNotTruncated->(7){-# LINE 568 "System/Posix/Files/Common.hsc" #-}VDisableChar->(8){-# LINE 569 "System/Posix/Files/Common.hsc" #-}{-# LINE 571 "System/Posix/Files/Common.hsc" #-}SyncIOAvailable->(9){-# LINE 572 "System/Posix/Files/Common.hsc" #-}{-# LINE 575 "System/Posix/Files/Common.hsc" #-}{-# LINE 577 "System/Posix/Files/Common.hsc" #-}AsyncIOAvailable->(10){-# LINE 578 "System/Posix/Files/Common.hsc" #-}{-# LINE 581 "System/Posix/Files/Common.hsc" #-}{-# LINE 583 "System/Posix/Files/Common.hsc" #-}PrioIOAvailable->(11){-# LINE 584 "System/Posix/Files/Common.hsc" #-}{-# LINE 587 "System/Posix/Files/Common.hsc" #-}{-# LINE 591 "System/Posix/Files/Common.hsc" #-}FileSizeBits->error"_PC_FILESIZEBITS not available"{-# LINE 593 "System/Posix/Files/Common.hsc" #-}{-# LINE 597 "System/Posix/Files/Common.hsc" #-}SymbolicLinkLimit->error"_PC_SYMLINK_MAX not available"{-# LINE 599 "System/Posix/Files/Common.hsc" #-}-- | @getFdPathVar var fd@ obtains the dynamic value of the requested-- configurable file limit or option associated with the file or directory-- attached to the open channel @fd@. For defined file limits, @getFdPathVar@-- returns the associated value. For defined file options, the result of-- @getFdPathVar@ is undefined, but not failure.---- Note: calls @fpathconf@.getFdPathVar::Fd->PathVar->IOLimitgetFdPathVar(Fdfd)v=throwErrnoIfMinus1"getFdPathVar"$c_fpathconffd(pathVarConstv)foreignimportccallunsafe"fpathconf"c_fpathconf::CInt->CInt->IOCLong