Date: Mon, 8 Jan 2007 17:00:28 GMT From: Maxim Konovalov <maxim@macomnet.ru> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/107676: file -p does not work Message-ID: <200701081700.l08H0SvP048344@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/107676; it has been noted by GNATS. From: Maxim Konovalov <maxim@macomnet.ru> To: bug-followup@freebsd.org Cc: Subject: Re: bin/107676: file -p does not work Date: Mon, 8 Jan 2007 19:51:35 +0300 (MSK) On Mon, 8 Jan 2007, 16:00-0000, Ricardo Nabinger Sanchez wrote: > The following reply was made to PR bin/107676; it has been noted by GNATS. > > From: Ricardo Nabinger Sanchez <rnsanchez@wait4.org> > To: "Dr. Markus Waldeck" <waldeck@gmx.de> > Cc: freebsd-gnats-submit@FreeBSD.org > Subject: Re: bin/107676: file -p does not work > Date: Mon, 8 Jan 2007 13:53:35 -0200 > > On Mon, 8 Jan 2007 13:45:01 GMT > "Dr. Markus Waldeck" <waldeck@gmx.de> wrote: > > > >Description: > > The option "-p" does not work because the utimes system call fails. > > > > ktrace: > > 28598 file CALL utimes(0xbfbfed78,0xbfbfe6d0) > > 28598 file RET utimes -1 errno 22 Invalid argument > > > > truss: > > utimes("FILENAME",{1168184675.-1077942524, 1166372455.000001}) ERR#22 > > 'Invalid argument' > > Also happens on 6.1-RELEASE i386: > > % truss file - p main.c > ... > lstat("main.c",0xbfbee200) = 0 (0x0) > open("main.c",0x0,027757561000) = 3 (0x3) > read(0x3,0xbfbee260,0x10000) = 6455 (0x1937) > break(0x8051000) = 0 (0x0) > lseek(3,0x0,SEEK_SET) = 0 (0x0) > close(3) = 0 (0x0) > utimes("main.c",{1168271467 -1077943672}) ERR#22 'Invalid argument' > ... Quick and mostly untested patch: Index: magic.c =================================================================== RCS file: /home/ncvs/src/contrib/file/magic.c,v retrieving revision 1.1.1.3 diff -u -p -r1.1.1.3 magic.c --- magic.c 19 Jun 2006 07:52:12 -0000 1.1.1.3 +++ magic.c 8 Jan 2007 16:46:12 -0000 @@ -195,6 +195,7 @@ close_and_restore(const struct magic_set */ #ifdef HAVE_UTIMES struct timeval utsbuf[2]; + memset(utsbuf, 0, sizeof(struct timeval) * 2); utsbuf[0].tv_sec = sb->st_atime; utsbuf[1].tv_sec = sb->st_mtime; @@ -202,6 +203,7 @@ close_and_restore(const struct magic_set #elif defined(HAVE_UTIME_H) || defined(HAVE_SYS_UTIME_H) struct utimbuf utbuf; + memset(&utbuf, 0, sizeof(struct utimbuf)); utbuf.actime = sb->st_atime; utbuf.modtime = sb->st_mtime; (void) utime(name, &utbuf); /* don't care if loses */ %%% -- Maxim Konovalov
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200701081700.l08H0SvP048344>