diff options
Diffstat (limited to 'Utilities/cmtar/handle.c')
-rw-r--r-- | Utilities/cmtar/handle.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/Utilities/cmtar/handle.c b/Utilities/cmtar/handle.c index 3bf4c28..6770b2b 100644 --- a/Utilities/cmtar/handle.c +++ b/Utilities/cmtar/handle.c @@ -34,23 +34,29 @@ const char libtar_version[] = PACKAGE_VERSION; -#define libtar_symbol(name, ret, args, callargs) \ - static ret libtar_##name args \ - { \ - return name callargs; \ - } - -#if defined(__BORLANDC__) -libtar_symbol(open, int, (const char* pathname, int flags, mode_t mode), (pathname, flags, mode)); -libtar_symbol(close, int, (int fd), (fd)); -libtar_symbol(read, ssize_t, (int fd, void* buf, size_t count), (fd, buf, count)); -libtar_symbol(write, ssize_t, (int fd, void* buf, size_t count), (fd, buf, count)); +static int libtar_open(void* call_data, const char* pathname, int flags, mode_t mode) +{ + (void)call_data; + return open(pathname, flags, mode); +} -static tartype_t default_type = { libtar_open, libtar_close, libtar_read, libtar_write }; -#else -static tartype_t default_type = { open, close, read, write }; -#endif +static int libtar_close(void* call_data, int fd) +{ + (void)call_data; + return close(fd); +} +static ssize_t libtar_read(void* call_data, int fd, void* buf, size_t count) +{ + (void)call_data; + return read(fd, buf, count); +} +static ssize_t libtar_write(void* call_data, int fd, const void* buf, size_t count) +{ + (void)call_data; + return write(fd, buf, count); +} +static tartype_t default_type = { libtar_open, libtar_close, libtar_read, libtar_write, 0 }; static int tar_init(TAR **t, char *pathname, tartype_t *type, @@ -102,7 +108,7 @@ tar_open(TAR **t, char *pathname, tartype_t *type, oflags |= O_BINARY; #endif - (*t)->fd = (*((*t)->type->openfunc))(pathname, oflags, mode); + (*t)->fd = (*((*t)->type->openfunc))((*t)->type->call_data, pathname, oflags, mode); if ((*t)->fd == -1) { free(*t); @@ -138,7 +144,7 @@ tar_close(TAR *t) { int i; - i = (*(t->type->closefunc))(t->fd); + i = (*(t->type->closefunc))(t->type->call_data, t->fd); if (t->h != NULL) libtar_hash_free(t->h, ((t->oflags & O_ACCMODE) == O_RDONLY |