śĪ™‘ķi      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab c d e f g h calls i) but will remove the target and retry if  i raises EEXIST. jk=FIXME: We should really get this value from the mount table.  8Return the device represented by a device node, such as /dev/sda2. F Returns Nothing if there is an exception trying to stat the node, or 3 if the node turns out not to be a special device. lmno8Removable devices, such as USB keys, are in this group. pq9Traverse a directory and return a list of all the (path,  fileStatus) pairs.      '5Set the indentation string for the generated output. 4Set the verbosity level. This value can be queried 9 using the verbosity function, but is not otherwise used % by the -- functions in this module. .If true print the elapsed time on termination 1If true, echo the shell command before beginning ,Type of output to generate during execution !Message printed on failure "*Message printed on successful termination #,Message printed before the execution begins $%Print nothing. &0Print an ellipsis (...) when the command starts  and then done. when it finishes. '2Print a dot for every 1024 characters the command  outputs (Print all the command's output with each line ( indented using (by default) the string ' > '. )@Create a task that sends its output to a handle and then can be ? terminated using an IO operation that returns an exit status. ' Throws an error if the command fails. *+,rstuv-Remove styles by class .*Add styles, replacing old ones if present /Singleton case of setStyles 0Singleton case of addStyles 12Add styles only if not present 34w56;The timeDiffToString function returns the empty string for 6 the zero time diff, this is not the behavior I need. 7xyz{ !"#$%&'()*+,-./01234567)*#"! 5$('&%+,14./20-376#"!  !"#$('&%%&'()*+,-./01234567"8.The process returns a list of objects of type 8. There will be D one Result object at the end of the list (if the list has an end.) 9:;<This is the type returned by | et. al. =>Kill the processes whose working directory is in or under the  given directory. >>6 - run a process returning (stdout, stderr, exitcode) Warning9 - stdout and stderr will be read strictly so that we do B not deadlock when trying to check the exitcode. Do not try doing  something like, simpleProcess ["yes"] >NOTE: this may still dead-lock because we first strictly read D outStr and then errStr. Perhaps we should use forkIO or something? ?@ABC}?Display up to thirty characters of a ByteString followed by an % ellipsis if some of it was omitted. ~Debugging output DCurrent verbosity level. Create a process with  and run it with F. ECreate a process with | and run it with F. F%Take the tuple like that returned by |, C create a process, send the list of inputs to its stdin and return  the lazy list of 8 objects. €@Wait until at least one handle is ready and then write input or D read output. Note that there is no way to check whether the input C handle is ready except to try to write to it and see if any bytes @ are accepted. If no input is accepted, or the input handle is B already closed, and none of the output descriptors are ready for . reading the function sleeps and tries again. 6Return the next output element and the updated handle ' from a handle which is assumed ready. G6Filter everything except stdout from the output list. H6Filter everything except stderr from the output list. I;Filter the exit codes output list and merge the two output # streams in the order they appear. J=Filter everything except the exit code from the output list. K3This belongs in Data.ByteString. See ticket 1070,   /http://hackage.haskell.org/trac/ghc/ticket/1070. LMNOP<Turn all the Stdout text into Stderr, preserving the order. Q<Turn all the Stderr text into Stdout, preserving the order. R!Split out and concatenate Stdout S!Split out and concatenate Stderr TNSplit out and concatenate both Stdout and Stderr, leaving only the exit code. U,Collect all output, unpack and concatenate. !89:;<=>?@ABCDEFGHIJKLMNOPQRSTU!>?@ABC<8;:9FDEGHILMNOPQRSTUJK=8;:99:;<=>?@ABCDEFGHIJKLMNOPQRSTUVV# - unmounts all mount points below  belowPath  /proc/9mounts must be present and readable. Because of the way " linux handles changeroots, we can't trust everything we see in  /proc/5mounts. However, we make the following assumptions:  = there is a one-to-one correspondence between the entries in  /proc/"mounts and the actual mounts, and A (2) every mount point we might encounter is a suffix of one of ! the mount points listed in /proc/mounts (because being in a  a chroot doesn' t affect /proc/ mounts.) So we can search /proc/(mounts for an entry has the mount point ? we are looking for as a substring, then add the extra text on ? the right to our path and try to unmount that. Then we start 5 again since nested mounts might have been revealed. *For example, suppose we are chrooted into  /home/david/ environments/sid and we call umountBelow /proc. We  might see the mount point /home/david/ environments/sid/proc/bus/usb  in /proc/#mounts, which means we need to run umount /proc/bus/usb.  See also: ‚ canonicalised, absolute path Upaths that we attempted to umount, and the responding output from the umount command ‚?umountSucceeded - predicated suitable for filtering results of V ƒƒ$ - unescape function for strings in /proc/mounts „„ - /proc/mount stytle string escaper WW& - run umount with the specified args * NOTE: this function uses exec, so you do not need to shell-escape  NOTE: we don'5t use the umount system call because the system call  is not smart enough to update /etc/mtab XVWXVWXVWXYZYZYZYZ[\[\[\[\ …]^_†,Weak attempt at canonicalizing a file path. `,Split the path into directory and file name  Examples: [Posix]  / splitFileName "/" == ("/", ".") 5 splitFileName "/foo/bar.ext" == ("/foo", "bar.ext") 5 splitFileName "bar.ext" == (".", "bar.ext") / splitFileName "/foo/." == ("/foo", ".") 0 splitFileName "/foo/.." == ("/foo", "..") [Windows]  5 splitFileName "\\" == ("\\", "") < splitFileName "c:\\foo\\bar.ext" == ("c:\\foo", "bar.ext") < splitFileName "bar.ext" == (".", "bar.ext") 6 splitFileName "c:\\foo\\." == ("c:\\foo", ".") 7 splitFileName "c:\\foo\\.." == ("c:\\foo", "..") CThe first case in the Windows examples returns an empty file name. $ This is a special case because the "\\" path doesn' t refer to A an object (file or directory) which resides within a directory. ‡DChecks whether the character is a valid path separator for the host $ platform. The valid character is a ˆ but since the Windows ( operating system also accepts a slash ("/") since DOS 2, the function & checks for it on this platform, too. ˆLProvides a platform-specific character used to separate directory levels in J a path string that reflects a hierarchical file system organization. The  separator is a slash ("/")) on Unix and Macintosh, and a backslash  ("\"#) on the Windows operating system. aresolve all references to ., .., extra slashes, and symlinks ]^_`a^_]a`]^_`a ‰b9Traverse a directory and return a list of all the (path,  fileStatus) pairs. ŠBTraverse a file system directory applying D to every directory, F : to every non-directory file, and M to every mount point. ! NOTE: It is tempting to use the find function to returns a list A of the elements of the directory and then map that list over an  unmount and remove/ function. However, because we are unmounting B as we traverse, the contents of the file list may change in ways ' that could confuse the find function. cARecursively remove a directory contents on a single file system.  The adjective "Safely" refers to these features: " 1. It will not follow symlinks > 2. If it finds a directory that seems to be a mount point, 8 it will attempt to unmount it up to five times. If it - still seems to be a mount point it gives up  3. It doesn't use proc$mounts, which is ambiguous or wrong  when you are inside a chroot. d$Like removeRecursiveSafely but doesn't remove any files, just A unmounts anything it finds mounted. Note that this can be much 2 slower than Mount.umountBelow, use that instead. e>Rename src to dst, and if dst already exists move it to dst~.  If dst~ exists it is removed. fItemporarily change the working directory to |dir| while running |action| gMcreate a temporary directory, run the action, remove the temporary directory C the first argument is a template for the temporary directory name d the directory will be created as a subdirectory of the directory returned by getTemporaryDirectory C the temporary directory will be automatically removed afterwards. ' your working directory is not altered hbcdefghbcdefghbcdefgh‹    !"#$%&'()*+,-./01.23456789:;<=>?@ABCD.EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm n o p q r s tuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ‰Š‹Ž‘’“”•–— ˜ ™šUnixutils-1.17System.Unix.ProcessSystem.Unix.ProgressSystem.Unix.FilesSystem.Unix.SpecialDeviceSystem.Unix.MountSystem.Unix.MiscSystem.Unix.ListSystem.Unix.FilePathSystem.Unix.DirectorybaseGHC.IO.Exception ExitSuccess ExitFailureExitCodeold-time-1.0.0.5 System.Time noTimeDiffTimeDiffforceSymbolicLink SpecialDevice sysMountPointofPathrootPartofNode ofNodeStatus ofSysName ofSysPath ofMajorMinorofDevNotoDevnonodenodes splitPart diskOfPartsysNamesysDir getAllDisksgetAllPartitions getAllCdromsgetAllRemovableStyleIndent VerbosityElapsedEchoOutputErrorFinishStartQuietDoneDotsIndented systemTask otherTaskmsgmsgLn removeStyle setStylessetStyleaddStyleoutput addStyles stripDist verbosity readStylefixedTimeDiffToString showElapsedResultStderrStdoutProcess killByCwd simpleProcess processResult processOutput simpleCommand commandResult commandOutput lazyCommand lazyProcesslazyRun stdoutOnly stderrOnly outputOnly exitCodeOnlyhPutNonBlocking checkResult discardStdout discardStderr discardOutput mergeToStderr mergeToStdout collectStdout collectStderr collectOutputcollectOutputUnpacked umountBelowumount isMountPointmd5sumgzipjoin consperse+/+dirNamebaseName splitFileNamerealpathfindremoveRecursiveSafelyunmountRecursiveSafelyrenameFileWithBackupwithWorkingDirectorywithTemporaryDirectorymkdtemp unix-2.4.0.2System.Posix.FilescreateSymbolicLinkCharacterDevice BlockDeviceparseSysDevFile diskGroup cdromGroup floppyGroupgetDisksInGroupdirectory_find putIndent startMessageprogressOutput finishMessage errorMessageindentelapsed isSublistOfmapSndePutprocess-1.0.1.3System.ProcessrunInteractiveProcess showBriefrunInteractiveCommandreadynextOutumountSucceededunescapeescape c_realpathcanonisPathSeparator pathSeparator c_mkdtemptraverse