date and time created 91/04/12 13:40:37 by bostic
[unix-history] / usr / src / lib / libc / gen / closedir.c
index dff016c..1f0cc2e 100644 (file)
@@ -2,47 +2,31 @@
  * Copyright (c) 1983 Regents of the University of California.
  * All rights reserved.
  *
  * Copyright (c) 1983 Regents of the University of California.
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * %sccs.include.redist.c%
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)closedir.c 5.5 (Berkeley) %G%";
+static char sccsid[] = "@(#)closedir.c 5.9 (Berkeley) %G%";
 #endif /* LIBC_SCCS and not lint */
 
 #endif /* LIBC_SCCS and not lint */
 
-#include <sys/param.h>
+#include <sys/types.h>
 #include <dirent.h>
 #include <dirent.h>
+#include <stdlib.h>
+#include <unistd.h>
 
 /*
  * close a directory.
  */
 
 /*
  * close a directory.
  */
-void
+int
 closedir(dirp)
        register DIR *dirp;
 {
 closedir(dirp)
        register DIR *dirp;
 {
-       register struct ddloc *lp, *olp;
-       register int i;
+       int fd;
 
 
-       close(dirp->dd_fd);
+       fd = dirp->dd_fd;
        dirp->dd_fd = -1;
        dirp->dd_loc = 0;
        dirp->dd_fd = -1;
        dirp->dd_loc = 0;
-       for (i = 0; i < NDIRHASH; i++) {
-               lp = dirp->dd_hash[i];
-               while (lp != NULL) {
-                       olp = lp;
-                       lp = lp->loc_next;
-                       free((caddr_t) olp);
-               }
-       }
-       free(dirp->dd_buf);
-       free((caddr_t)dirp);
+       (void)free((void *)dirp->dd_buf);
+       (void)free((void *)dirp);
+       return(close(fd));
 }
 }