home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
crt
/
src
/
rewind.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-17
|
2KB
|
78 lines
/***
*rewind.c - rewind a stream
*
* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines rewind() - rewinds a stream to the beginning.
*
*
*******************************************************************************/
#include <cruntime.h>
#include <stdio.h>
#include <file2.h>
#include <dbgint.h>
#include <io.h>
#include <mtdll.h>
#include <msdos.h>
#include <internal.h>
/***
*void rewind(stream) - rewind a string
*
*Purpose:
* Back up a stream to the beginning (if not terminal). First flush it.
* If read/write, allow next i/o operation to set mode.
*
*Entry:
* FILE *stream - file to rewind
*
*Exit:
* returns 0 if success
* returns -1 if fails
*
*Exceptions:
*
*******************************************************************************/
void __cdecl rewind (
FILE *str
)
{
REG1 FILE *stream;
REG2 int fd;
_ASSERTE(str != NULL);
/* Init stream pointer */
stream = str;
fd = _fileno(stream);
/* Lock the file */
_lock_str(stream);
/* Flush the stream */
_flush(stream);
/* Clear errors */
stream->_flag &= ~(_IOERR|_IOEOF);
#ifdef _WIN32
_osfile_safe(fd) &= ~(FEOFLAG);
#else /* _WIN32 */
_osfile[fd] &= ~(FEOFLAG);
#endif /* _WIN32 */
/* Set flags */
/* [note: _flush set _cnt=0 and _ptr=_base] */
if (stream->_flag & _IORW)
stream->_flag &= ~(_IOREAD|_IOWRT);
/* Position to beginning of file */
_lseek(fd,0L,0);
/* unlock stream */
_unlock_str(stream);
}