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