diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /sys/fio/falloc.x | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'sys/fio/falloc.x')
-rw-r--r-- | sys/fio/falloc.x | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/sys/fio/falloc.x b/sys/fio/falloc.x new file mode 100644 index 00000000..c84ef000 --- /dev/null +++ b/sys/fio/falloc.x @@ -0,0 +1,73 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include <knet.h> +include <mach.h> +include <syserr.h> +include <error.h> +include <config.h> +include <fio.h> + +# FALLOC -- Create a binary file of a given size, and open as a binary file +# with read write permission. Interrupts are disabled while the VFN database +# is open to protect the database, ensure that that the lock on the mapping +# file is cleared, and to ensure that the mapping file is closed. + +procedure falloc (fname, file_size) + +char fname[ARB] # virtual file name +long file_size # file size in chars + +int status, junk +pointer vp + +int vfnadd() +pointer vfnopen() +bool fnullfile() +errchk fclobber +include <fio.com> + +define close_ 91 +define abort_ 92 + +begin + # The null file "dev$null" is a special case; ignore attempts to + # create this file. + + if (fnullfile (fname)) + return + + # Perform clobber checking, delete old file if one exists. + # Note that this must be done before opening the new VFN for + # writing or deadlock on the VFN database may occur. + + call fclobber (fname) + + # Add new VFN and get the OSFN of the new file. + # Allocate the file and update VFN database. + + call intr_disable() + iferr (vp = vfnopen (fname, VFN_WRITE)) + goto abort_ + iferr (junk = vfnadd (vp, pathname, SZ_PATHNAME)) + goto close_ + + call zfaloc (pathname, file_size * SZB_CHAR, status) + if (status == ERR) { + iferr (call filerr (fname, SYS_FALLOC)) + goto close_ + } else + iferr (call vfnclose (vp, VFN_UPDATE)) + goto abort_ + + call intr_enable() + return + + + # Error recovery nasties. +close_ + iferr (call vfnclose (vp, VFN_NOUPDATE)) + ; +abort_ + call intr_enable() + call erract (EA_ERROR) +end |