NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: PR/42879 CVS commit: src



Hi,

This fix breaks compatibility for pre-3.0 binaries.

Here is a patch. (I don't know whether such __RENAME() usage is appropriate.)


Index: lib/libc/compat/gen/Makefile.inc
===================================================================
RCS file: /usr/home/cvs/NetBSD/src/lib/libc/compat/gen/Makefile.inc,v
retrieving revision 1.14
diff -u -r1.14 Makefile.inc
--- lib/libc/compat/gen/Makefile.inc    12 Mar 2011 19:52:47 -0000      1.14
+++ lib/libc/compat/gen/Makefile.inc    16 May 2011 08:44:57 -0000
@@ -3,8 +3,9 @@
 .PATH: ${COMPATDIR}/gen
 SRCS+=compat_errlist.c compat_fts.c compat___fts13.c compat___fts30.c \
     compat___fts31.c compat_getmntinfo.c compat_glob.c compat___glob13.c \
-    compat_opendir.c compat_readdir.c compat__readdir_unlocked30.c \
-    compat_scandir.c compat_siglist.c compat_signame.c compat_sigsetops.c \
+    compat_opendir.c compat_initdir.c compat_readdir.c \
+    compat__readdir_unlocked30.c compat_scandir.c \
+    compat_siglist.c compat_signame.c compat_sigsetops.c \
     compat_times.c compat_timezone.c compat_unvis.c compat_utmpx.c \
     compat__sys_errlist.c compat__sys_nerr.c compat__sys_siglist.c \
     compat_time.c compat_utime.c compat_devname.c compat_alphasort.c \
Index: lib/libc/compat/include/dirent.h
===================================================================
RCS file: /usr/home/cvs/NetBSD/src/lib/libc/compat/include/dirent.h,v
retrieving revision 1.7
diff -u -r1.7 dirent.h
--- lib/libc/compat/include/dirent.h    24 Feb 2009 18:42:36 -0000      1.7
+++ lib/libc/compat/include/dirent.h    16 May 2011 09:25:39 -0000
@@ -51,6 +51,9 @@
 
 #if defined(_NETBSD_SOURCE)
 
+int _initdir(DIR *, int, const char *);
+int ___initdir60(DIR *, int, const char *);
+
 struct dirent12 *_readdir_unlocked(DIR *, int);
 struct dirent *___readdir_unlocked50(DIR *, int);
 struct dirent *___readdir_unlocked30(DIR *);
Index: lib/libc/gen/Makefile.inc
===================================================================
RCS file: /usr/home/cvs/NetBSD/src/lib/libc/gen/Makefile.inc,v
retrieving revision 1.178
diff -u -r1.178 Makefile.inc
--- lib/libc/gen/Makefile.inc   26 Mar 2011 19:51:42 -0000      1.178
+++ lib/libc/gen/Makefile.inc   16 May 2011 08:41:54 -0000
@@ -9,7 +9,7 @@
        confstr.c ctermid.c ctype_.c daemon.c \
        dehumanize_number.c devname.c dirname.c disklabel.c err.c errx.c \
        errlist.c errno.c execl.c execle.c execlp.c execv.c execvp.c \
-       extattr.c fmtcheck.c fmtmsg.c fnmatch.c fstab.c ftok.c \
+       extattr.c finidir.c fmtcheck.c fmtmsg.c fnmatch.c fstab.c ftok.c \
        fts.c ftw.c getbsize.c getcap.c getcwd.c \
        getdevmajor.c getdomainname.c getgrent.c \
        getgrouplist.c getgroupmembership.c gethostname.c \
Index: lib/libc/gen/dirent_private.h
===================================================================
RCS file: /usr/home/cvs/NetBSD/src/lib/libc/gen/dirent_private.h,v
retrieving revision 1.4
diff -u -r1.4 dirent_private.h
--- lib/libc/gen/dirent_private.h       26 Sep 2010 02:26:59 -0000      1.4
+++ lib/libc/gen/dirent_private.h       16 May 2011 09:25:47 -0000
@@ -15,10 +15,10 @@
 struct _dirdesc;
 void _seekdir_unlocked(struct _dirdesc *, long);
 long _telldir_unlocked(struct _dirdesc *);
-int _initdir(DIR *, int, const char *);
 void _finidir(DIR *);
 #ifndef __LIBC12_SOURCE__
 struct dirent;
+int _initdir(DIR *, int, const char *) __RENAME(___initdir60);
 struct dirent *_readdir_unlocked(struct _dirdesc *, int)
     __RENAME(___readdir_unlocked50);
 #endif
Index: lib/libc/gen/finidir.c
===================================================================
RCS file: lib/libc/gen/finidir.c
diff -N lib/libc/gen/finidir.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lib/libc/gen/finidir.c      16 May 2011 09:03:10 -0000
@@ -0,0 +1,63 @@
+/*     $NetBSD: initdir.c,v 1.1 2010/09/26 02:26:59 yamt Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: initdir.c,v 1.1 2010/09/26 02:26:59 yamt Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+#include "reentrant.h"
+#include "extern.h"
+
+#include <sys/param.h>
+
+#include <assert.h>
+#include <dirent.h>
+#include <stdlib.h>
+
+#include "dirent_private.h"
+
+void
+_finidir(DIR *dirp)
+{
+       struct dirpos *poslist;
+
+       free(dirp->dd_buf);
+
+       /* free seekdir/telldir storage */
+       for (poslist = dirp->dd_internal; poslist; ) {
+               struct dirpos *nextpos = poslist->dp_next;
+               free(poslist);
+               poslist = nextpos;
+       }
+       dirp->dd_internal = NULL;
+}
Index: lib/libc/gen/initdir.c
===================================================================
RCS file: /usr/home/cvs/NetBSD/src/lib/libc/gen/initdir.c,v
retrieving revision 1.1
diff -u -r1.1 initdir.c
--- lib/libc/gen/initdir.c      26 Sep 2010 02:26:59 -0000      1.1
+++ lib/libc/gen/initdir.c      16 May 2011 08:40:33 -0000
@@ -256,19 +256,3 @@
        (void)_telldir_unlocked(dirp);
        return 0;
 }
-
-void
-_finidir(DIR *dirp)
-{
-       struct dirpos *poslist;
-
-       free(dirp->dd_buf);
-
-       /* free seekdir/telldir storage */
-       for (poslist = dirp->dd_internal; poslist; ) {
-               struct dirpos *nextpos = poslist->dp_next;
-               free(poslist);
-               poslist = nextpos;
-       }
-       dirp->dd_internal = NULL;
-}




Home | Main Index | Thread Index | Old Index