- if (!zflag && !lflag && (fstat(fd, &statb) == 0))
- filesize = statb.st_size;
+ if (!zflag && !lflag && (fstat(fd, &statb) == 0)) {
+ if (S_ISFIFO(statb.st_mode)) {
+ /* stat(2) on pipe may return only the
+ * first few bytes with more coming.
+ * Don't trust!
+ */
+ } else {
+ filesize = statb.st_size;
+ }
+ }