lemon-project-template-glpk

annotate deps/glpk/src/zlib/zio.c @ 11:4fc6ad2fb8a6

Test GLPK in src/main.cc
author Alpar Juttner <alpar@cs.elte.hu>
date Sun, 06 Nov 2011 21:43:29 +0100
parents
children
rev   line source
alpar@9 1 /* zio.c (simulation of non-standard low-level i/o functions) */
alpar@9 2
alpar@9 3 /* Written by Andrew Makhorin <mao@gnu.org>, April 2011
alpar@9 4 * For conditions of distribution and use, see copyright notice in
alpar@9 5 * zlib.h */
alpar@9 6
alpar@9 7 /* (reserved for copyright notice) */
alpar@9 8
alpar@9 9 #include <assert.h>
alpar@9 10 #include <stdio.h>
alpar@9 11 #include "zio.h"
alpar@9 12
alpar@9 13 static FILE *file[FOPEN_MAX];
alpar@9 14 static int initialized = 0;
alpar@9 15
alpar@9 16 static void initialize(void)
alpar@9 17 { int fd;
alpar@9 18 assert(!initialized);
alpar@9 19 file[0] = stdin;
alpar@9 20 file[1] = stdout;
alpar@9 21 file[2] = stderr;
alpar@9 22 for (fd = 3; fd < FOPEN_MAX; fd++)
alpar@9 23 file[fd] = NULL;
alpar@9 24 initialized = 1;
alpar@9 25 return;
alpar@9 26 }
alpar@9 27
alpar@9 28 int open(const char *path, int oflag, ...)
alpar@9 29 { FILE *fp;
alpar@9 30 int fd;
alpar@9 31 if (!initialized) initialize();
alpar@9 32 /* see file gzlib.c, function gz_open */
alpar@9 33 if (oflag == O_RDONLY)
alpar@9 34 fp = fopen(path, "rb");
alpar@9 35 else if (oflag == (O_WRONLY | O_CREAT | O_TRUNC))
alpar@9 36 fp = fopen(path, "wb");
alpar@9 37 else if (oflag == (O_WRONLY | O_CREAT | O_APPEND))
alpar@9 38 fp = fopen(path, "ab");
alpar@9 39 else
alpar@9 40 assert(oflag != oflag);
alpar@9 41 if (fp == NULL)
alpar@9 42 return -1;
alpar@9 43 for (fd = 0; fd < FOPEN_MAX; fd++)
alpar@9 44 if (file[fd] == NULL) break;
alpar@9 45 assert(fd < FOPEN_MAX);
alpar@9 46 file[fd] = fp;
alpar@9 47 return fd;
alpar@9 48 }
alpar@9 49
alpar@9 50 long read(int fd, void *buf, unsigned long nbyte)
alpar@9 51 { unsigned long count;
alpar@9 52 if (!initialized) initialize();
alpar@9 53 assert(0 <= fd && fd < FOPEN_MAX);
alpar@9 54 assert(file[fd] != NULL);
alpar@9 55 count = fread(buf, 1, nbyte, file[fd]);
alpar@9 56 if (ferror(file[fd]))
alpar@9 57 return -1;
alpar@9 58 return count;
alpar@9 59 }
alpar@9 60
alpar@9 61 long write(int fd, const void *buf, unsigned long nbyte)
alpar@9 62 { unsigned long count;
alpar@9 63 if (!initialized) initialize();
alpar@9 64 assert(0 <= fd && fd < FOPEN_MAX);
alpar@9 65 assert(file[fd] != NULL);
alpar@9 66 count = fwrite(buf, 1, nbyte, file[fd]);
alpar@9 67 if (count != nbyte)
alpar@9 68 return -1;
alpar@9 69 if (fflush(file[fd]) != 0)
alpar@9 70 return -1;
alpar@9 71 return count;
alpar@9 72 }
alpar@9 73
alpar@9 74 long lseek(int fd, long offset, int whence)
alpar@9 75 { if (!initialized) initialize();
alpar@9 76 assert(0 <= fd && fd < FOPEN_MAX);
alpar@9 77 assert(file[fd] != NULL);
alpar@9 78 if (fseek(file[fd], offset, whence) != 0)
alpar@9 79 return -1;
alpar@9 80 return ftell(file[fd]);
alpar@9 81 }
alpar@9 82
alpar@9 83 int close(int fd)
alpar@9 84 { if (!initialized) initialize();
alpar@9 85 assert(0 <= fd && fd < FOPEN_MAX);
alpar@9 86 assert(file[fd] != NULL);
alpar@9 87 fclose(file[fd]);
alpar@9 88 file[fd] = NULL;
alpar@9 89 return 0;
alpar@9 90 }
alpar@9 91
alpar@9 92 /* eof */