source: lib/libtraceio-zlib.c @ 5e85c23

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 5e85c23 was eecda9f, checked in by Perry Lorier <perry@…>, 15 years ago

Make splint happier

  • Property mode set to 100644
File size: 1.5 KB
Line 
1#include "libtraceio.h"
2#include <zlib.h>
3#include <stdlib.h>
4#include <errno.h>
5
6struct libtrace_io_t {
7        gzFile file;
8};
9
10ssize_t libtrace_io_read(libtrace_io_t *io, void *buf, size_t len)
11{
12        int err=gzread(io->file,buf,len);
13        int err2=errno;
14        if (err>=0) {
15                /* successfully read <x> bytes */
16                return (ssize_t)err;
17        }
18        switch(err) {
19                case Z_STREAM_END:
20                        return 0;
21                case Z_ERRNO:
22                        if (err2==0)
23                                return 0; /* EOF */
24                        return -1;
25                case Z_MEM_ERROR:
26                        errno=ENOMEM;
27                        return -1;
28                default:
29                      /* Some decompression error or something */
30                      errno=EINVAL;
31                      return -1;
32        }
33}
34
35libtrace_io_t *libtrace_io_fdopen(int fd, const char *mode)
36{
37        libtrace_io_t *io = (libtrace_io_t*)malloc(sizeof(libtrace_io_t));
38        if (io == NULL)
39                return NULL;
40        io->file = gzdopen(fd,mode);
41        return io;
42}
43
44libtrace_io_t *libtrace_io_open(const char *path, const char *mode)
45{
46        libtrace_io_t *io = (libtrace_io_t*)malloc(sizeof(libtrace_io_t));
47        if (io == NULL)
48                return NULL;
49        io->file = gzopen(path,mode);
50        return io;
51}
52
53/* Technically close returns -1 on failure, but if the close fails, really
54 * what are you going to do about it?
55 */
56void libtrace_io_close(libtrace_io_t *io)
57{
58        (void)gzclose(io->file);
59        io->file=NULL;
60        free(io);
61}
62
63ssize_t libtrace_io_write(libtrace_io_t *io, const void *buf, size_t len)
64{
65        return (ssize_t)gzwrite(io->file,buf,len);
66}
67
68off_t libtrace_io_seek(libtrace_io_t *io, off_t offset, int whence)
69{
70        return gzseek(io->file,offset,whence);
71}
72
73ssize_t libtrace_io_tell(libtrace_io_t *io)
74{
75        return (ssize_t)gztell(io->file);
76}
Note: See TracBrowser for help on using the repository browser.