darcs-2.12.5: a distributed, interactive, smart revision control system

Copyright | 2008 David Roundy <droundy@darcs.net>
License | GPL
Maintainer | darcs-devel@darcs.net
Stability | experimental
Portability | portable
Safe Haskell | Safe
Language | Haskell2010

Darcs.Util.Workaround

Description

Synopsis

- renameFile :: FilePath -> FilePath -> IO ()
- setExecutable :: FilePath -> Bool -> IO ()
- getCurrentDirectory :: IO FilePath
- installHandler :: Signal -> Handler -> Maybe SignalSet -> IO Handler
- raiseSignal :: Signal -> IO ()
- data Handler :: *
  - = Default
  - | Ignore
  - | Catch (IO ())
  - | CatchOnce (IO ())
  - | CatchInfo (SignalInfo -> IO ())
  - | CatchInfoOnce (SignalInfo -> IO ())
- type Signal = CInt
- sigINT :: CInt
- sigHUP :: CInt
- sigABRT :: CInt
- sigALRM :: CInt
- sigTERM :: CInt
- sigPIPE :: CInt

# Documentation

renameFile :: FilePath -> FilePath -> IO () #

``renameFile` old new` changes the name of an existing file system object from old to new. If the new object already exists, it is atomically replaced by the old object. Neither path may refer to an existing directory. A conformant implementation need not support renaming files in all situations (e.g. renaming across different physical devices), but the constraints must be documented.

The operation may fail with:

- `HardwareFault` A physical I/O error has occurred. `[EIO]`
- `InvalidArgument` Either operand is not a valid file name. `[ENAMETOOLONG, ELOOP]`
- `isDoesNotExistError` / `NoSuchThing` The original file does not exist, or there is no path to the target. `[ENOENT, ENOTDIR]`
- `isPermissionError` / `PermissionDenied` The process has insufficient privileges to perform the operation. `[EROFS, EACCES, EPERM]`
- `ResourceExhausted` Insufficient resources are available to perform the operation. `[EDQUOT, ENOSPC, ENOMEM, EMLINK]`
- `UnsatisfiedConstraints` Implementation-dependent constraints are not satisfied. `[EBUSY]`
- `UnsupportedOperation` The implementation does not support renaming in this situation. `[EXDEV]`
- `InappropriateType` Either path refers to an existing directory. `[ENOTDIR, EISDIR, EINVAL, EEXIST, ENOTEMPTY]`

setExecutable :: FilePath -> Bool -> IO () #

getCurrentDirectory :: IO FilePath #

Obtain the current working directory as an absolute path.

In a multithreaded program, the current working directory is a global state shared among all threads of the process. Therefore, when performing filesystem operations from multiple threads, it is highly recommended to use absolute rather than relative paths (see: `makeAbsolute`).

The operation may fail with:

- `HardwareFault` A physical I/O error has occurred. `[EIO]`
- `isDoesNotExistError` or `NoSuchThing` There is no path referring to the working directory. `[EPERM, ENOENT, ESTALE...]`
- `isPermissionError` or `PermissionDenied` The process has insufficient privileges to perform the operation. `[EACCES]`
- `ResourceExhausted` Insufficient resources are available to perform the operation.
- `UnsupportedOperation` The operating system has no notion of current working directory.

installHandler #

Arguments

:: Signal |
-> Handler |
-> Maybe SignalSet | other signals to block
-> IO Handler | old handler

`installHandler int handler iset` calls `sigaction` to install an interrupt handler for signal `int`. If `handler` is `Default`, `SIG_DFL` is installed; if `handler` is `Ignore`, `SIG_IGN` is installed; if `handler` is `Catch action`, a handler is installed which will invoke `action` in a new thread when (or shortly after) the signal is received. If `iset` is `Just s`, then the `sa_mask` of the `sigaction` structure is set to `s`; otherwise it is cleared. The previously installed signal handler for `int` is returned

raiseSignal :: Signal -> IO () #

`raiseSignal int` calls `kill` to signal the current process with interrupt signal `int`.

data Handler :: * #

The actions to perform when a signal is received.

Constructors

Default |
Ignore |
Catch (IO ()) |
CatchOnce (IO ()) |
CatchInfo (SignalInfo -> IO ()) | Since: 2.7.0.0
CatchInfoOnce (SignalInfo -> IO ()) | Since: 2.7.0.0

type Signal = CInt #

sigINT :: CInt #

sigHUP :: CInt #

sigABRT :: CInt #

sigALRM :: CInt #

sigTERM :: CInt #

sigPIPE :: CInt #