1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
/*
* $Id: ferror.c 4148 2011-03-02 08:36:31Z baud $
*/
/*
* Copyright (C) 1990-2011 by CERN/IT/PDP/DM
* All rights reserved
*/
#ifndef lint
static char sccsid[] = "@(#)$RCSfile: ferror.c,v $ $Revision: 4148 $ $Date: 2011-03-02 09:36:31 +0100 (Wed, 02 Mar 2011) $ CERN/IT/PDP/DM Antoine Trannoy";
#endif /* not lint */
/* ferror.c Remote File I/O - tell if an error happened */
#define RFIO_KERNEL 1 /* KERNEL part of the routines */
#include "rfio.h" /* Remote File I/O general definitions */
#include "rfio_rfilefdt.h"
#include <stdlib.h>
int rfio_ferror(fp)
RFILE * fp ;
{
int rc ;
INIT_TRACE("RFIO_TRACE");
TRACE(1, "rfio", "rfio_ferror(%x)", fp);
if ( fp == NULL ) {
errno = EBADF;
END_TRACE();
return -1 ;
}
/*
* The file is local
*/
if (rfio_rfilefdt_findptr(fp,FINDRFILE_WITH_SCAN) == -1 ) {
rc= ferror((FILE *)fp) ;
END_TRACE() ;
rfio_errno = 0;
return rc ;
}
/*
* Checking magic number
*/
if ( fp->magic != RFIO_MAGIC) {
int fps = fp->s;
serrno = SEBADVERSION ;
free((char *)fp);
(void) close(fps) ;
END_TRACE() ;
return -1 ;
}
/*
* The file is remote, using then the eof flag updated
* by rfio_fread.
*/
#ifdef linux
if ( ((RFILE *)fp)->eof & _IO_ERR_SEEN )
#else
#if defined( __APPLE__)
if ( ((RFILE *)fp)->eof & __SERR )
#else
#ifdef __Lynx__
if ( ((RFILE *)fp)->eof & _ERR )
#else
if ( ((RFILE *)fp)->eof & _IOERR )
#endif
#endif
#endif
rc = 1 ;
else
rc = 0 ;
END_TRACE() ;
return rc ;
}
|