There was an error in my last fix: *buf = '\0'; should have read **buf = '\0'; thus: if(rsize <= 2) { fseek(pf->fp, fpos, SEEK_SET); **buf = '\0'; return 0; } -Nigel