diff options
Diffstat (limited to 'usr/src/common/ficl/ficlplatform/unix.c')
-rw-r--r-- | usr/src/common/ficl/ficlplatform/unix.c | 86 |
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 |