aboutsummaryrefslogtreecommitdiff
path: root/sys/fio/falloc.x
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fio/falloc.x')
-rw-r--r--sys/fio/falloc.x73
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