Messages in this thread | | | Date | Wed, 16 Apr 2008 23:47:09 +0400 | From | Alexey Dobriyan <> | Subject | Re: Current git tree broke busybox start-stop-daemon |
| |
On Wed, Apr 16, 2008 at 08:34:17PM +0100, Al Viro wrote: > On Wed, Apr 16, 2008 at 11:00:57PM +0400, Alexey Dobriyan wrote: > > On Wed, Apr 16, 2008 at 07:25:02PM +0200, Joakim Tjernlund wrote: > > > open("/proc/1/stat", O_RDONLY|O_LARGEFILE) = 4 > > > _llseek(4, 0, 0xbfb94898, SEEK_END) = -1 EINVAL (Invalid argument) > > > > > So it appears that lseek is no longer allowed for /proc/1/stat > > > Bug or feature? > > > start-stop-daemon works fine in 2.6.23 > > > > That's what happens when switching ->llseek method from NULL > > (effectively, default_llseek), to seq_lseek (which rejects SEEK_END). > > > > commit be614086a4aff163d5aa0dc160638d1193b59cde > > commit ee992744ea53db0a90c986fd0a70fbbf91e7f8bd > > > > Al, do you remember why SEEK_END was omitted back then? > > Because there's no sane way to implement it?
Ugly ->index games, sigh...
> Note that original cheerfully > did nothing, since it had zero ->i_size for that file. Which makes program > in question very odd - what behaviour does it rely upon?
Busybox just wants to estimate size of a file. And it knows about zero-length /proc/*/stat .
libbb/read.c:
void *xmalloc_open_read_close(const char *filename, size_t *sizep) { char *buf; size_t size = sizep ? *sizep : INT_MAX; int fd; off_t len;
fd = xopen(filename, O_RDONLY); /* /proc/N/stat files report len 0 here */ /* In order to make such files readable, we add small const */ len = xlseek(fd, 0, SEEK_END) | 0x3ff; /* + up to 1k */ ...
| |