aboutsummaryrefslogtreecommitdiff
path: root/sys/libc/cseek.c
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /sys/libc/cseek.c
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'sys/libc/cseek.c')
-rw-r--r--sys/libc/cseek.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/sys/libc/cseek.c b/sys/libc/cseek.c
new file mode 100644
index 00000000..58cedcc3
--- /dev/null
+++ b/sys/libc/cseek.c
@@ -0,0 +1,42 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+*/
+
+#define import_spp
+#define import_libc
+#define import_xnames
+#define import_fset
+#include <iraf.h>
+
+
+/* C_SEEK -- FIO seek on a file. If the actual file is a text file the
+** seek offset is assumed to have been obtained by a prior call to FTELL
+** and is passed on unchanged. If the actual file is a binary file the
+** seek offset is a zero-indexed byte offset. This offset is converted
+** to a one-indexed XCHAR offset; it is an error if the offset is not
+** aligned to an XCHAR word boundary.
+*/
+int
+c_seek (
+ XINT fd, /* FIO file descriptor */
+ long offset /* file offset */
+)
+{
+ XLONG x_char_offset = offset;
+ XINT x_fd = fd;
+ int bypass;
+
+
+ bypass = (offset == BOFL || offset == EOFL
+ || c_fstati (fd, F_TYPE) == TEXT_FILE);
+
+ if (!bypass) {
+ x_char_offset /= sizeof(XCHAR);
+ if ((x_char_offset++ * sizeof(XCHAR)) != offset)
+ return ((long) ERR);
+ }
+
+ iferr (SEEK (&x_fd, &x_char_offset))
+ return (ERR);
+ else
+ return (OK);
+}