Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #define NEED_PLDEBUG
00027 #include "plplotP.h"
00028
00029 #if defined ( MSDOS ) || defined ( WIN32 )
00030 #include <sys/types.h>
00031 #include <sys/stat.h>
00032 #include <fcntl.h>
00033 #endif
00034
00035
00036
00037
00038
00039
00040
00041 #if defined ( _MSC_VER ) && _MSC_VER >= 1400
00042 #include <io.h>
00043 #define mktemp _mktemp
00044 #define open _open
00045 #define fdopen _fdopen
00046 #endif
00047
00048
00049
00050
00051
00052
00053
00054 void
00055 plio_fwrite( void *buf, size_t size, size_t nmemb, FILE *stream )
00056 {
00057 size_t bytes;
00058
00059 dbug_enter( "plio_fwrite" );
00060
00061
00062 if ( size == 0 || nmemb == 0 )
00063 return;
00064
00065
00066 clearerr( stream );
00067
00068 bytes = fwrite( buf, size, nmemb, stream );
00069
00070 if ( ferror( stream ) )
00071 {
00072
00073
00074
00075 plabort( "Error writing to file" );
00076 }
00077 }
00078
00079
00080
00081
00082
00083
00084
00085
00086 void
00087 plio_fread( void *buf, size_t size, size_t nmemb, FILE *stream )
00088 {
00089 size_t bytes;
00090
00091 dbug_enter( "plio_fread" );
00092
00093
00094 if ( size == 0 || nmemb == 0 )
00095 {
00096 plwarn( "Zero length buffer size in plio_read, returning" );
00097 return;
00098 }
00099
00100
00101 clearerr( stream );
00102
00103 bytes = fread( buf, size, nmemb, stream );
00104
00105 if ( ferror( stream ) )
00106 {
00107
00108 plabort( "Error reading from file" );
00109 }
00110 }
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 void
00131 plio_fgets( char *buf, int size, FILE *stream )
00132 {
00133 char *s;
00134
00135 dbug_enter( "plio_fgets" );
00136
00137
00138 if ( size == 0 )
00139 {
00140 plwarn( "Zero length buffer size in plio_fgets, returning" );
00141 return;
00142 }
00143
00144
00145 clearerr( stream );
00146
00147 s = fgets( buf, size, stream );
00148
00149 if ( s == NULL && ferror( stream ) )
00150 {
00151
00152 plabort( "Error reading from file" );
00153 }
00154 }
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173 FILE *
00174 pl_create_tempfile( char **fname )
00175 {
00176 int flags;
00177 FILE *fd;
00178 char *tmpdir;
00179 char *template;
00180 const char *tmpname = "plplot_XXXXXX";
00181
00182 #if defined ( MSDOS ) || defined ( WIN32 )
00183 tmpdir = getenv( "TEMP" );
00184 #else
00185 tmpdir = getenv( "TMPDIR" );
00186 #endif
00187
00188
00189 #ifdef P_TMPDIR
00190 if ( tmpdir == NULL )
00191 tmpdir = P_TMPDIR;
00192 #endif
00193
00194 if ( tmpdir == NULL )
00195 {
00196 #if defined ( MSDOS ) || defined ( WIN32 )
00197 tmpdir = "c:\\windows\\Temp";
00198 #else
00199 tmpdir = "/tmp";
00200 #endif
00201 }
00202
00203
00204 template = (char *) malloc( sizeof ( char ) * ( strlen( tmpdir ) + strlen( tmpname ) + 2 ) );
00205 strcpy( template, tmpdir );
00206 #if defined ( MSDOS ) || defined ( WIN32 )
00207 strcat( template, "\\" );
00208 #else
00209 strcat( template, "/" );
00210 #endif
00211 strcat( template, tmpname );
00212
00213 #ifdef PL_HAVE_MKSTEMP
00214 fd = fdopen( mkstemp( template ), "wb+" );
00215 if ( fd == NULL )
00216 {
00217 plwarn( "pl_create_tempfile: Unable to open temporary file - returning" );
00218 if ( fname != NULL )
00219 *fname = NULL;
00220 free( template );
00221 return NULL;
00222 }
00223
00224
00225 #ifdef PL_HAVE_UNLINK
00226 if ( fname == NULL )
00227 unlink( template );
00228 #endif
00229 #else
00230 #if !defined ( _S_IREAD )
00231 #define _S_IREAD 256
00232 #endif
00233 #if !defined ( _S_IWRITE )
00234 #define _S_IWRITE 128
00235 #endif
00236 fd = NULL;
00237 flags = O_RDWR | O_BINARY | O_CREAT | O_EXCL | _O_SHORT_LIVED;
00238
00239
00240 if ( fname == NULL )
00241 flags = flags | _O_TEMPORARY;
00242 mktemp( template );
00243 fd = fdopen( open( template, flags, _S_IREAD | _S_IWRITE ), "wb+" );
00244 #endif
00245
00246 if ( fname != NULL )
00247 {
00248 *fname = template;
00249 }
00250 else
00251 {
00252 free( template );
00253 }
00254
00255 return fd;
00256 }
00257