From: Andreas Schwab <schwab@suse.de>
To: linux-ia64@vger.kernel.org
Subject: Re: [Linux-ia64] utime emulation
Date: Tue, 06 Aug 2002 20:40:36 +0000 [thread overview]
Message-ID: <marc-linux-ia64-105590701905920@msgid-missing> (raw)
In-Reply-To: <marc-linux-ia64-105590701905917@msgid-missing>
"Wichmann, Mats D" <mats.d.wichmann@intel.com> writes:
|> I'm finding that utime(filename, NULL) doesn't
|> follow specs - this comes up in plodding through
|> the LSB certification test suite.
|>
|> For example, if the process does not own the
|> file but has write permission, the above
|> referenced call should succeed but fails with EPERM.
|>
|> utime() is emulated on Itanium: in the kernel,
|> fs/open.c doesn't have a sys_utime routine
|> if __ia64__ or alpha; the emulation comes from
|> glibc's sysdeps/unix/utime.c but appears to
|> be bogus. The problem is that if the second
|> argument to utime is NULL the emulation code
|> does some work to build up a "struct timeval"
|> array as expected by utimes(), and passes that
|> off, instead of passing NULL... and so the
|> proper checks in the NULL case don't get done
|> by the kernel.
|>
|> I guess this is a query to see if anyone
|> on this list knows anything about this code.
|> Is this just a glibc problem,
Yes. Here is a patch:
2002-08-06 Andreas Schwab <schwab@suse.de>
* sysdeps/unix/utime.c: If TIMES is NULL pass it through to
utimes.
--- sysdeps/unix/utime.c.~1.3.~ 2001-07-16 10:45:00.000000000 +0200
+++ sysdeps/unix/utime.c 2002-08-06 22:29:53.000000000 +0200
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1994, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1994, 1997, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -31,7 +31,7 @@ utime (file, times)
const char *file;
const struct utimbuf *times;
{
- struct timeval timevals[2];
+ struct timeval timevals[2], *tvp;
if (times != NULL)
{
@@ -39,13 +39,10 @@ utime (file, times)
timevals[0].tv_usec = 0L;
timevals[1].tv_sec = (long int) times->modtime;
timevals[1].tv_usec = 0L;
+ tvp = timevals;
}
else
- {
- if (__gettimeofday (&timevals[0], NULL) < 0)
- return -1;
- timevals[1] = timevals[0];
- }
+ tvp = NULL;
- return __utimes (file, timevals);
+ return __utimes (file, tvp);
}
Andreas.
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
prev parent reply other threads:[~2002-08-06 20:40 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-08-06 19:01 [Linux-ia64] utime emulation Wichmann, Mats D
2002-08-06 20:23 ` David Mosberger
2002-08-06 20:40 ` Andreas Schwab [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=marc-linux-ia64-105590701905920@msgid-missing \
--to=schwab@suse.de \
--cc=linux-ia64@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.