Return to BSD News archive
Newsgroups: comp.unix.bsd Path: sserve!manuel.anu.edu.au!munnari.oz.au!spool.mu.edu!sol.ctr.columbia.edu!news.columbia.edu!cucbs.chem.columbia.edu!cucbs.chem.columbia.edu!russo From: russo@cucbs.chem.columbia.edu (Thomas Russo) Subject: [386BSD] bug in fgetpos Message-ID: <RUSSO.92Dec6125119@cucbs.chem.columbia.edu> Sender: russo@cucbs.chem.columbia.edu (Thomas Russo) Organization: Center for Biomolecular Simulation, Department of Chemistry, Columbia University Date: Sun, 6 Dec 1992 17:51:19 GMT Lines: 48 I believe I've found a bug in fgetpos which caused xviewgl (and presumably anything else which counted on the proper return values of fgetpos) to puke. The man says: Upon successful completion, fgetpos(), fseek(), fsetpos() return 0, and ftell() returns the current offset. Otherwise, -1 is returned and the global variable errno is set to indicate the error. But fgetpos itself said: fgetpos(fp,pos) FILE *fp; fpos_t *pos; { return((*pos = ftell(fp)) != (fpos_t)-1); } which returns 1 if (*pos !=-1) and returns 0 (setting errno through ftell) if (*pos==-1). A trivial fix: *** /usr/src/lib/libc/stdio/fgetpos.c.broken Sat Dec 5 22:30:05 1992 --- /usr/src/lib/libc/stdio/fgetpos.c Sat Dec 5 22:30:49 1992 *************** *** 44,48 **** FILE *fp; fpos_t *pos; { ! return((*pos = ftell(fp)) != (fpos_t)-1); } --- 44,48 ---- FILE *fp; fpos_t *pos; { ! return(((*pos = ftell(fp)) != (fpos_t)-1) ? 0:-1); } -- Thomas Russo russo@nile.chem.columbia.edu Department of Chemistry and Center for Biomolecular Simulation Columbia University