This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: several more bugs found by coreutils


Corinna Vinschen wrote:
On Feb 2 11:07, Corinna Vinschen wrote:

On Feb 1 20:58, Erik Blake wrote:

Further coreutils-5.3.0 debugging turned up more POSIX bugs in cygwin:

<pwd.h> defines struct passwd with the pw_uid and pw_gid members as ints, although POSIX requires uid_t and gid_t.
http://www.opengroup.org/onlinepubs/009695399/basedefs/dirent.h.html

include/pwd.h is a newlib file. However, I was pretty happy that pw_uid and pw_gid were defined as int, when we changed uids and gids from 16 to 32 bits. It was the one file which wasn't necessary to change.

We could just redefine struct passwd to use uid_t and gid_t, but this
would break (very very very very unlikely) builds of Cygwin using
sources of versions before 1.5.0.  In other words, old Cygwin sources
using 16 bit uids/gids would go down hell.

Personally, I think I can live with that, but I would like to hear if
there's any good reason to build historic versions (say, b20) with a
recent newlib.


<sys/time.h> defines utimes with non-const second parameter, although POSIX requires it to be const; likewise for utime in <utime.h> (deferred to <sys/utime.h>).  Additionally, both utimes() and utime() are required to touch file ctime on success.
http://www.opengroup.org/onlinepubs/009695399/functions/utimes.html
[snip]

That should be easy to change in sys/time.h. As far as the implementation of utime/utimes is affected, I already changed it to set st_ctime.


I have attached a patch to newlib this time.  Thinking about that
for a while, I'm pretty sure that it doesn't make sense to build
old 32 bit versions of Cygwin with recent newlib versions.  So I'm
opting for having a clean pwd.h.

The below patch changes the definitions of struct passwd and utimes(2)
according to SUSv3.


Looks fine. Please go ahead.


-- Jeff J.


Corinna


	* libc/include/pwd.h (struct passwd): Change pw_uid and pw_gid
	members to uid_t and gid_t according to SUSv3.
	* libc/include/sys/time.h (utimes):  Change second parameter
	to const according to SUSv3.

Index: libc/include/pwd.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/pwd.h,v
retrieving revision 1.2
diff -p -u -r1.2 pwd.h
--- libc/include/pwd.h 9 Mar 2003 21:08:51 -0000 1.2
+++ libc/include/pwd.h 8 Feb 2005 17:37:22 -0000
@@ -50,8 +50,8 @@ extern "C" {
struct passwd {
char *pw_name; /* user name */
char *pw_passwd; /* encrypted password */
- int pw_uid; /* user uid */
- int pw_gid; /* user gid */
+ uid_t pw_uid; /* user uid */
+ gid_t pw_gid; /* user gid */
char *pw_comment; /* comment */
char *pw_gecos; /* Honeywell login info */
char *pw_dir; /* home directory */
Index: libc/include/sys/time.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/sys/time.h,v
retrieving revision 1.4
diff -p -u -r1.4 time.h
--- libc/include/sys/time.h 21 Apr 2001 03:22:47 -0000 1.4
+++ libc/include/sys/time.h 8 Feb 2005 17:37:22 -0000
@@ -72,7 +72,7 @@ struct itimerval {
int _EXFUN(gettimeofday, (struct timeval *__p, struct timezone *__z));
int _EXFUN(settimeofday, (const struct timeval *, const struct timezone *));
-int _EXFUN(utimes, (const char *__path, struct timeval *__tvp));
+int _EXFUN(utimes, (const char *__path, const struct timeval *__tvp));
int _EXFUN(getitimer, (int __which, struct itimerval *__value));
int _EXFUN(setitimer, (int __which, const struct itimerval *__value,
struct itimerval *__ovalue));




--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]