Scippy

SCIP

Solving Constraint Integer Programs

fileio.c
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of the program and library */
4 /* SCIP --- Solving Constraint Integer Programs */
5 /* */
6 /* Copyright (C) 2002-2022 Konrad-Zuse-Zentrum */
7 /* fuer Informationstechnik Berlin */
8 /* */
9 /* SCIP is distributed under the terms of the ZIB Academic License. */
10 /* */
11 /* You should have received a copy of the ZIB Academic License */
12 /* along with SCIP; see the file COPYING. If not visit scipopt.org. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file fileio.c
17  * @ingroup OTHER_CFILES
18  * @brief wrapper functions to map file i/o to standard or zlib file i/o
19  * @author Tobias Achterberg
20  */
21 
22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
23 
24 #include <stdio.h>
25 #include <stdarg.h>
26 
27 #include "scip/pub_fileio.h"
28 
29 
30 #define BUFFER_LEN 8192
31 
32 #ifdef SCIP_WITH_ZLIB
33 
34 /* file i/o using zlib */
35 #include <zlib.h>
36 
37 SCIP_FILE* SCIPfopen(const char *path, const char *mode)
38 {
39  return (SCIP_FILE*)gzopen(path, mode);
40 }
41 
42 SCIP_FILE* SCIPfdopen(int fildes, const char *mode)
43 {
44  return (SCIP_FILE*)gzdopen(fildes, mode);
45 }
46 
47 size_t SCIPfread(void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
48 {
49  int nbytesread;
50 
51  nbytesread = gzread((gzFile)stream, ptr, (unsigned int) (size * nmemb));
52  /* An error occured if nbytesread < 0. To be compatible with fread(), we return 0, which signifies an error there. */
53  if ( nbytesread < 0 )
54  return 0;
55 
56  return (size_t) nbytesread; /*lint !e571*/
57 }
58 
59 size_t SCIPfwrite(const void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
60 {
61  return (size_t) gzwrite((gzFile)stream, ptr, (unsigned int) (size * nmemb)); /*lint !e571*/
62 }
63 
64 int SCIPfprintf(SCIP_FILE *stream, const char *format, ...)
65 {
66  char buffer[BUFFER_LEN];
67  va_list ap;
68  int n;
69 
70  va_start(ap, format); /*lint !e826*/
71 #if defined(_WIN32) || defined(_WIN64)
72  n = _vsnprintf(buffer, BUFFER_LEN, format, ap);
73 #else
74  n = vsnprintf(buffer, BUFFER_LEN, format, ap);
75 #endif
76  va_end(ap);
77  if( n < 0 || n > BUFFER_LEN)
78  buffer[BUFFER_LEN-1] = '\0';
79 
80  return gzputs((gzFile)stream, buffer);
81 }
82 
83 int SCIPfputc(int c, SCIP_FILE *stream)
84 {
85  return gzputc((gzFile)stream, c);
86 }
87 
88 int SCIPfputs(const char *s, SCIP_FILE *stream)
89 {
90  return gzputs((gzFile)stream, s);
91 }
92 
93 int SCIPfgetc(SCIP_FILE *stream)
94 {
95  return gzgetc((gzFile)stream);
96 }
97 
98 char* SCIPfgets(char *s, int size, SCIP_FILE *stream)
99 {
100  if( size > 0 )
101  s[0] = '\0';
102  return gzgets((gzFile)stream, s, size);
103 }
104 
105 int SCIPfflush(SCIP_FILE *stream)
106 {
107  return gzflush((gzFile)stream, Z_SYNC_FLUSH);
108 }
109 
110 int SCIPfseek(SCIP_FILE *stream, long offset, int whence)
111 {
112  return (int) gzseek((gzFile)stream, offset, whence);
113 }
114 
115 void SCIPrewind(SCIP_FILE *stream)
116 {
117  (void) gzrewind((gzFile)stream);
118 }
119 
120 long SCIPftell(SCIP_FILE *stream)
121 {
122  return gztell((gzFile)stream);
123 }
124 
125 int SCIPfeof(SCIP_FILE *stream)
126 {
127  return gzeof((gzFile)stream);
128 }
129 
130 int SCIPfclose(SCIP_FILE *fp)
131 {
132  return gzclose((gzFile)fp);
133 }
134 
135 
136 #else
137 
138 #ifdef _MSC_VER
139 #define fdopen _fdopen
140 #endif
141 
142 /* file i/o using standard i/o */
143 
144 SCIP_FILE* SCIPfopen(const char *path, const char *mode)
145 {
146  return (SCIP_FILE*)fopen(path, mode);
147 }
148 
149 SCIP_FILE* SCIPfdopen(int fildes, const char *mode)
150 {
151  return (SCIP_FILE*)fdopen(fildes, mode);
152 }
153 
154 size_t SCIPfread(void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
155 {
156  return fread(ptr, size, nmemb, (FILE*)stream);
157 }
158 
159 size_t SCIPfwrite(const void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
160 {
161  return fwrite(ptr, size, nmemb, (FILE*)stream);
162 }
163 
164 int SCIPfprintf(SCIP_FILE *stream, const char *format, ...)
165 {
166  va_list ap;
167  int retval;
168 
169  va_start(ap, format); /*lint !e826*/
170  retval = vfprintf((FILE*)stream, format, ap);
171  va_end(ap);
172 
173  return retval;
174 }
175 
176 int SCIPfputc(int c, SCIP_FILE *stream)
177 {
178  return fputc(c, (FILE*)stream);
179 }
180 
181 int SCIPfputs(const char *s, SCIP_FILE *stream)
182 {
183  return fputs(s, (FILE*)stream);
184 }
185 
186 int SCIPfgetc(SCIP_FILE *stream)
187 {
188  return fgetc((FILE*)stream);
189 }
190 
191 char* SCIPfgets(char *s, int size, SCIP_FILE *stream)
192 {
193  if( size > 0 )
194  s[0] = '\0';
195  return fgets(s, size, (FILE*)stream);
196 }
197 
198 int SCIPfflush(SCIP_FILE *stream)
199 {
200  return fflush((FILE*)stream);
201 }
202 
203 int SCIPfseek(SCIP_FILE *stream, long offset, int whence)
204 {
205  return fseek((FILE*)stream, offset, whence);
206 }
207 
208 void SCIPrewind(SCIP_FILE *stream)
209 {
210  rewind((FILE*)stream);
211 }
212 
213 long SCIPftell(SCIP_FILE *stream)
214 {
215  return ftell((FILE*)stream);
216 }
217 
218 int SCIPfeof(SCIP_FILE *stream)
219 {
220  return feof((FILE*)stream);
221 }
222 
224 {
225  return fclose((FILE*)fp);
226 }
227 
228 
229 #endif
size_t SCIPfread(void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
Definition: fileio.c:154
#define BUFFER_LEN
Definition: fileio.c:30
int SCIPfgetc(SCIP_FILE *stream)
Definition: fileio.c:186
int SCIPfputs(const char *s, SCIP_FILE *stream)
Definition: fileio.c:181
int SCIPfflush(SCIP_FILE *stream)
Definition: fileio.c:198
int SCIPfseek(SCIP_FILE *stream, long offset, int whence)
Definition: fileio.c:203
int SCIPfputc(int c, SCIP_FILE *stream)
Definition: fileio.c:176
size_t SCIPfwrite(const void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
Definition: fileio.c:159
SCIP_FILE * SCIPfopen(const char *path, const char *mode)
Definition: fileio.c:144
int SCIPfprintf(SCIP_FILE *stream, const char *format,...)
Definition: fileio.c:164
int SCIPfeof(SCIP_FILE *stream)
Definition: fileio.c:218
struct SCIP_File SCIP_FILE
Definition: pub_fileio.h:34
char * SCIPfgets(char *s, int size, SCIP_FILE *stream)
Definition: fileio.c:191
wrapper functions to map file i/o to standard or zlib file i/o
SCIP_FILE * SCIPfdopen(int fildes, const char *mode)
Definition: fileio.c:149
void SCIPrewind(SCIP_FILE *stream)
Definition: fileio.c:208
int SCIPfclose(SCIP_FILE *fp)
Definition: fileio.c:223
long SCIPftell(SCIP_FILE *stream)
Definition: fileio.c:213