From 19df4c09934924cf97df6357139e29011b106996 Mon Sep 17 00:00:00 2001 From: Juergen Daubert Date: Wed, 22 Nov 2006 08:03:42 +0100 Subject: [PATCH] coreutils: added patch to fix ls -l segfault --- coreutils/.md5sum | 1 + coreutils/Pkgfile | 10 +- coreutils/coreutils-6.5-idcache.patch | 160 ++++++++++++++++++++++++++ 3 files changed, 168 insertions(+), 3 deletions(-) create mode 100644 coreutils/coreutils-6.5-idcache.patch diff --git a/coreutils/.md5sum b/coreutils/.md5sum index f3de4727..d4a5201a 100644 --- a/coreutils/.md5sum +++ b/coreutils/.md5sum @@ -1,2 +1,3 @@ +5dceda9c41277cbfe825cf8f394a6191 coreutils-6.5-idcache.patch ecf8e9aa5b85dd89a0b18d5fab63de55 coreutils-6.5.tar.bz2 c05b735710fbd62239588c07084852a0 coreutils-uname.patch diff --git a/coreutils/Pkgfile b/coreutils/Pkgfile index e7edc51d..aa6942d6 100644 --- a/coreutils/Pkgfile +++ b/coreutils/Pkgfile @@ -4,13 +4,16 @@ name=coreutils version=6.5 -release=1 +release=2 source=(http://ftp.gnu.org/pub/gnu/$name/$name-$version.tar.bz2 \ - $name-uname.patch) + $name-uname.patch $name-$version-idcache.patch) build() { cd $name-$version - patch -p1 < ../$name-uname.patch + + patch -p1 < $SRC/$name-uname.patch + patch -d lib -p0 < $SRC/$name-$version-idcache.patch + DEFAULT_POSIX2_VERSION=199209 \ ./configure --prefix=/usr \ --mandir=/usr/man \ @@ -18,6 +21,7 @@ build() { --disable-assert make make DESTDIR=$PKG install + mkdir $PKG/bin mv $PKG/usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo,false,ln,ls,mkdir} $PKG/bin mv $PKG/usr/bin/{mknod,mv,pwd,readlink,rm,rmdir,stty,sync,touch,true,uname} $PKG/bin diff --git a/coreutils/coreutils-6.5-idcache.patch b/coreutils/coreutils-6.5-idcache.patch new file mode 100644 index 00000000..c7e1af39 --- /dev/null +++ b/coreutils/coreutils-6.5-idcache.patch @@ -0,0 +1,160 @@ +See http://lists.gnu.org/archive/html/bug-coreutils/2006-11/msg00153.html + +diff -u -p -r1.18 idcache.c +--- idcache.c 6 Nov 2006 22:02:53 -0000 1.18 ++++ idcache.c 20 Nov 2006 09:15:25 -0000 +@@ -55,24 +55,32 @@ static struct userid *nouser_alist; + char * + getuser (uid_t uid) + { +- register struct userid *tail; +- struct passwd *pwent; +- char const *name; ++ struct userid *tail; ++ struct userid *match = NULL; + + for (tail = user_alist; tail; tail = tail->next) +- if (tail->id.u == uid) +- return tail->name; ++ { ++ if (tail->id.u == uid) ++ { ++ match = tail; ++ break; ++ } ++ } + +- pwent = getpwuid (uid); +- name = pwent ? pwent->pw_name : ""; +- tail = xmalloc (offsetof (struct userid, name) + strlen (name) + 1); +- tail->id.u = uid; +- strcpy (tail->name, name); ++ if (match == NULL) ++ { ++ struct passwd *pwent = getpwuid (uid); ++ char const *name = pwent ? pwent->pw_name : ""; ++ match = xmalloc (offsetof (struct userid, name) + strlen (name) + 1); ++ match->id.u = uid; ++ strcpy (match->name, name); ++ ++ /* Add to the head of the list, so most recently used is first. */ ++ match->next = user_alist; ++ user_alist = match; ++ } + +- /* Add to the head of the list, so most recently used is first. */ +- tail->next = user_alist; +- user_alist = tail; +- return tail->name; ++ return match->name[0] ? match->name : NULL; + } + + /* Translate USER to a UID, with cache. +@@ -83,7 +91,7 @@ getuser (uid_t uid) + uid_t * + getuidbyname (const char *user) + { +- register struct userid *tail; ++ struct userid *tail; + struct passwd *pwent; + + for (tail = user_alist; tail; tail = tail->next) +@@ -94,7 +102,7 @@ getuidbyname (const char *user) + for (tail = nouser_alist; tail; tail = tail->next) + /* Avoid a function call for the most common case. */ + if (*tail->name == *user && !strcmp (tail->name, user)) +- return 0; ++ return NULL; + + pwent = getpwnam (user); + #ifdef __DJGPP__ +@@ -121,7 +129,7 @@ getuidbyname (const char *user) + + tail->next = nouser_alist; + nouser_alist = tail; +- return 0; ++ return NULL; + } + + /* Use the same struct as for userids. */ +@@ -133,24 +141,32 @@ static struct userid *nogroup_alist; + char * + getgroup (gid_t gid) + { +- register struct userid *tail; +- struct group *grent; +- char const *name; ++ struct userid *tail; ++ struct userid *match = NULL; + + for (tail = group_alist; tail; tail = tail->next) +- if (tail->id.g == gid) +- return tail->name; ++ { ++ if (tail->id.g == gid) ++ { ++ match = tail; ++ break; ++ } ++ } + +- grent = getgrgid (gid); +- name = grent ? grent->gr_name : NULL; +- tail = xmalloc (offsetof (struct userid, name) + strlen (name) + 1); +- tail->id.g = gid; +- strcpy (tail->name, name); ++ if (match == NULL) ++ { ++ struct group *grent = getgrgid (gid); ++ char const *name = grent ? grent->gr_name : ""; ++ match = xmalloc (offsetof (struct userid, name) + strlen (name) + 1); ++ match->id.g = gid; ++ strcpy (match->name, name); ++ ++ /* Add to the head of the list, so most recently used is first. */ ++ match->next = group_alist; ++ group_alist = match; ++ } + +- /* Add to the head of the list, so most recently used is first. */ +- tail->next = group_alist; +- group_alist = tail; +- return tail->name; ++ return match->name[0] ? match->name : NULL; + } + + /* Translate GROUP to a GID, with cache. +@@ -161,7 +177,7 @@ getgroup (gid_t gid) + gid_t * + getgidbyname (const char *group) + { +- register struct userid *tail; ++ struct userid *tail; + struct group *grent; + + for (tail = group_alist; tail; tail = tail->next) +@@ -172,12 +188,12 @@ getgidbyname (const char *group) + for (tail = nogroup_alist; tail; tail = tail->next) + /* Avoid a function call for the most common case. */ + if (*tail->name == *group && !strcmp (tail->name, group)) +- return 0; ++ return NULL; + + grent = getgrnam (group); + #ifdef __DJGPP__ + /* We need to pretend to belong to group GROUP, to make +- grp functions know about any arbitrary group name. */ ++ grp functions know about an arbitrary group name. */ + if (!grent && strspn (group, digits) < strlen (group)) + { + setenv ("GROUP", group, 1); +@@ -199,5 +215,5 @@ getgidbyname (const char *group) + + tail->next = nogroup_alist; + nogroup_alist = tail; +- return 0; ++ return NULL; + } + + +