30 #include <sys/types.h>    40 #if defined ( _MSC_VER ) && _MSC_VER >= 1400    42 #define mktemp    _mktemp    44 #define fdopen    _fdopen    51 #if defined ( _MSC_VER )    53 #  define getcwd    _getcwd    73     if ( size == 0 || nmemb == 0 )
    79     fwrite( buf, size, nmemb, stream );
    81     if ( ferror( stream ) )
    86         plabort( 
"Error writing to file" );
   105     if ( size == 0 || nmemb == 0 )
   107         plwarn( 
"Zero length buffer size in plio_fread, returning" );
   114     bytes = fread( buf, size, nmemb, stream );
   116     if ( ( bytes < nmemb ) && ferror( stream ) )
   119         plabort( 
"Error reading from file" );
   151         plwarn( 
"Zero length buffer size in plio_fgets, returning" );
   158     s = fgets( buf, size, stream );
   160     if ( s == NULL && ferror( stream ) )
   163         plabort( 
"Error reading from file" );
   181     PLINT ntmpdir_list = 0;
   182 #if defined ( MSDOS ) || defined ( _WIN32 )   183     tmpdir_list[ntmpdir_list] = getenv( 
"TMP" );
   184     if ( tmpdir_list[ntmpdir_list] != NULL && ntmpdir_list < max_ntmpdir_list )
   187     tmpdir_list[ntmpdir_list] = getenv( 
"TEMP" );
   188     if ( tmpdir_list[ntmpdir_list] != NULL && ntmpdir_list < max_ntmpdir_list )
   191     tmpdir_list[ntmpdir_list] = getenv( 
"TMPDIR" );
   192     if ( tmpdir_list[ntmpdir_list] != NULL && ntmpdir_list < max_ntmpdir_list )
   197     tmpdir_list[ntmpdir_list] = P_tmpdir;
   198     if ( tmpdir_list[ntmpdir_list] != NULL && ntmpdir_list < max_ntmpdir_list )
   201 #endif //#if defined ( MSDOS ) || defined ( _WIN32 )   205     if ( getcwd( currdir, maxcurrdir ) == NULL )
   206         plexit( 
"get_tmpdir_list: getcwd error" );
   207     tmpdir_list[ntmpdir_list] = currdir;
   208     if ( ntmpdir_list < max_ntmpdir_list )
   211 #if defined ( MSDOS ) || defined ( _WIN32 )   212     tmpdir_list[ntmpdir_list] = 
"c:\\windows\\Temp";
   214     tmpdir_list[ntmpdir_list] = 
"/tmp";
   216     if ( ntmpdir_list < max_ntmpdir_list )
   244     char          *
template = NULL;
   246 #ifndef PL_HAVE_MKSTEMP   250 #define PL_MAXNTMPDIR_LIST    5   256     for ( itmpdir = 0; itmpdir < ntmpdir_list; itmpdir++ )
   259         tmpdir = tmpdir_list[itmpdir];
   260         pldebug( 
"pl_create_tempfile", 
"Attempting to create temporary file in %s directory\n", tmpdir );
   264         template = (
char *) realloc( 
template, 
sizeof ( 
char ) * ( strlen( tmpdir ) + strlen( tmpname ) + 2 ) );
   265         strcpy( 
template, tmpdir );
   266 #if defined ( MSDOS ) || defined ( _WIN32 )   267         strcat( 
template, 
"\\" );
   269         strcat( 
template, 
"/" );
   271         strcat( 
template, tmpname );
   273 #ifdef PL_HAVE_MKSTEMP   274         fd = fdopen( mkstemp( 
template ), 
"wb+" );
   275 #else   //#ifdef PL_HAVE_MKSTEMP   278 #if !defined ( _S_IREAD )   281 #if !defined ( _S_IWRITE )   282 #define _S_IWRITE    128   285         flags = O_RDWR | O_CREAT | O_EXCL;
   286 #if defined ( MSDOS ) || defined ( _WIN32 )   288         flags = flags | O_BINARY | _O_SHORT_LIVED;
   292             flags = flags | _O_TEMPORARY;
   296 #endif  // #ifdef PL_HAVE_MKSTEMP   304         plwarn( 
"pl_create_tempfile: Unable to open temporary file - returning" );
   310 #if defined ( PL_HAVE_MKSTEMP ) && defined ( PL_HAVE_UNLINK )   346 #if !defined PL_HAVE_MKDTEMP || !defined PL_HAVE_MKFIFO   347     plwarn( 
"Creating fifos not supported on this platform" );
   351     char          *
template = NULL;
   352     char          *dirname  = NULL;
   357 #define PL_MAXNTMPDIR_LIST    5   364     for ( itmpdir = 0; itmpdir < ntmpdir_list; itmpdir++ )
   367         tmpdir = tmpdir_list[itmpdir];
   368         pldebug( 
"pl_create_tempfifo", 
"Attempting to create temporary fifo in %s directory\n", tmpdir );
   372         dirname = (
char *) realloc( dirname, 
sizeof ( 
char ) * ( strlen( tmpdir ) + strlen( tmpname ) + 2 ) );
   373         strcpy( dirname, tmpdir );
   374 #if defined ( MSDOS ) || defined ( _WIN32 )   375         strcat( dirname, 
"\\" );
   377         strcat( dirname, 
"/" );
   379         strcat( dirname, tmpname );
   381         dirname = mkdtemp( dirname );
   382         if ( dirname == NULL )
   389         *p_dirname = dirname;
   392         template = (
char *) realloc( 
template, 
sizeof ( 
char ) * ( strlen( tmpdir ) + strlen( tmpname ) + strlen( fifoname ) + 4 ) );
   393         strcpy( 
template, dirname );
   394 #if defined ( MSDOS ) || defined ( _WIN32 )   395         strcat( 
template, 
"\\" );
   397         strcat( 
template, 
"/" );
   399         strcat( 
template, fifoname );
   400         *p_fifoname = 
template;
   403         mkfifo_rc = mkfifo( 
template, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH );
 
void plexit(PLCHAR_VECTOR errormsg)
FILE * pl_create_tempfile(char **fname)
const char * PLCHAR_VECTOR
void plabort(PLCHAR_VECTOR errormsg)
void plio_fwrite(void *buf, size_t size, size_t nmemb, FILE *stream)
void plio_fgets(char *buf, int size, FILE *stream)
char * pl_create_tempfifo(const char **p_fifoname, const char **p_dirname)
void plio_fread(void *buf, size_t size, size_t nmemb, FILE *stream)
void plwarn(PLCHAR_VECTOR errormsg)
#define PL_MAXNTMPDIR_LIST
static PLINT get_tmpdir_list(PLINT max_ntmpdir_list, char **tmpdir_list, PLINT maxcurrdir, char *currdir)