home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_10_01
/
1001018a
< prev
next >
Wrap
Text File
|
1991-11-18
|
1KB
|
51 lines
Listing 6 -- the file xfoprep.c
/* _Foprep function */
#include "xstdio.h"
/* open a stream */
FILE *_Foprep(const char *name, const char *mods,
FILE *str)
{ /* make str safe for fclose, macros */
str->_Handle = -1;
str->_Tmpnam = NULL;
str->_Buf = NULL;
str->_Next = &str->_Cbuf;
str->_Rend = &str->_Cbuf;
str->_Wend = &str->_Cbuf;
str->_Nback = 0;
str->_Mode = (str->_Mode & _MALFIL)
| (*mods == 'r' ? _MOPENR
: *mods == 'w' ? _MCREAT|_MOPENW|_MTRUNC
: *mods == 'a' ? _MCREAT|_MOPENW|_MOPENA
: 0);
if ((str->_Mode & (_MOPENR|_MOPENW)) == 0)
{ /* bad mods */
fclose(str);
return (NULL);
}
while (*++mods== 'b' || *mods == '+')
if (*mods == 'b')
if (str->_Mode & _MBIN)
break;
else
str->_Mode |= _MBIN;
else
if ((str->_Mode & (_MOPENR|_MOPENW))
== (_MOPENR|_MOPENW))
break;
else
str->_Mode |= _MOPENR|_MOPENW;
str->_Handle = _Fopen(name, str->_Mode, mods);
if (str->_Handle < 0)
{ /* open failed */
fclose(str);
return (NULL);
}
return (str);
}