summaryrefslogtreecommitdiff
path: root/usr/src/common/ficl/ficlplatform/unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/common/ficl/ficlplatform/unix.c')
-rw-r--r--usr/src/common/ficl/ficlplatform/unix.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/usr/src/common/ficl/ficlplatform/unix.c b/usr/src/common/ficl/ficlplatform/unix.c
new file mode 100644
index 0000000000..ac49de5c2f
--- /dev/null
+++ b/usr/src/common/ficl/ficlplatform/unix.c
@@ -0,0 +1,86 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source. A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2015 Toomas Soome <tsoome@me.com>
+ */
+
+#include "ficl.h"
+
+void *
+ficlMalloc(size_t size)
+{
+ return (malloc(size));
+}
+
+void *
+ficlRealloc(void *p, size_t size)
+{
+ return (realloc(p, size));
+}
+
+void
+ficlFree(void *p)
+{
+ free(p);
+}
+
+void
+ficlCallbackDefaultTextOut(ficlCallback *callback, char *message)
+{
+ FICL_IGNORE(callback);
+
+ if (message != NULL) {
+#ifdef STAND
+ while (*message != 0)
+ putchar((unsigned char)*(message++));
+#else
+ (void) fputs(message, stdout);
+ (void) fflush(stdout);
+#endif
+ }
+}
+
+#if FICL_WANT_FILE
+int
+ficlFileTruncate(ficlFile *ff, ficlUnsigned size)
+{
+ return (ftruncate(fileno(ff->f), size));
+}
+
+int
+ficlFileStatus(char *filename, int *status)
+{
+ struct stat statbuf;
+
+ if (stat(filename, &statbuf) == 0) {
+ *status = statbuf.st_mode;
+ return (0);
+ }
+ *status = ENOENT;
+ return (-1);
+}
+
+long
+ficlFileSize(ficlFile *ff)
+{
+ struct stat statbuf;
+
+ if (ff == NULL)
+ return (-1);
+
+ statbuf.st_size = -1;
+ if (fstat(fileno(ff->f), &statbuf) != 0)
+ return (-1);
+
+ return (statbuf.st_size);
+}
+#endif