summary refs log tree commit diff
path: root/nss/nss_db
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-01-04 17:51:12 +0000
committerUlrich Drepper <drepper@redhat.com>2000-01-04 17:51:12 +0000
commitcbc85992cd683cbadbf2ed2011cad1ee04aa42b5 (patch)
tree9a09d928fbaa199a801ae58cc0063c89bd0af0ef /nss/nss_db
parent52354636d3ba63e3467c9062f6ddbaf5138f0229 (diff)
downloadglibc-cbc85992cd683cbadbf2ed2011cad1ee04aa42b5.tar.gz
glibc-cbc85992cd683cbadbf2ed2011cad1ee04aa42b5.tar.xz
glibc-cbc85992cd683cbadbf2ed2011cad1ee04aa42b5.zip
Update.
2000-01-04  Andreas Jaeger  <aj@suse.de>

	* nss/nss_db/dummy-db.h (struct db24): Add missing field flags.
	(struct db27): Add missing fields byteswapped, join and flags;
	remove wrong member handleq.
	(struct dbc27): Correct lock field.

	* nss/makedb.c: Remove __P.

2000-01-04  Andreas Jaeger  <aj@suse.de>

	* nss/nss_db/db-open.c (internal_setent): Check for db_open for
	success, fix a memory leak and clean up function.

2000-01-04  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile (install): Pass $(install_root) to ldconfig.
	Patch by Akira YOSHIYAMA <yosshy@tkf.att.ne.jp>.

2000-01-03  Jakub Jelinek  <jakub@redhat.com>

	* soft-fp/op-1.h: Fix division for machines using not normalizing
	version of udiv_qrnnd in longlong.h.
	* soft-fp/sysdeps/mips/sfp-machine.h: Likewise.
	* soft-fp/sysdeps/mips/mips64/sfp-machine.h: Likewise.
	* soft-fp/sysdeps/sparc/sparc64/sfp-machine.h: Likewise.
	Patch by Eddie C. Dost <ecd@skynet.be>.

	* soft-fp/soft-fp.h (QItype, UQItype): New types used by longlong.h.

2000-01-03  Andreas Schwab  <schwab@suse.de>

	* sysdeps/generic/dl-sysdep.c: Initialize __libc_multiple_libcs,
	needed for change in common symbol handing in newer binutils.
Diffstat (limited to 'nss/nss_db')
-rw-r--r--nss/nss_db/db-open.c111
-rw-r--r--nss/nss_db/dummy-db.h12
2 files changed, 62 insertions, 61 deletions
diff --git a/nss/nss_db/db-open.c b/nss/nss_db/db-open.c
index c3a0679485..75d39efaf6 100644
--- a/nss/nss_db/db-open.c
+++ b/nss/nss_db/db-open.c
@@ -118,6 +118,9 @@ internal_setent (const char *file, NSS_DB **dbp)
   enum nss_status status = NSS_STATUS_SUCCESS;
   int err;
   void *db;
+  int fd;
+  int result;
+
 
   if (*dbp == NULL)
     {
@@ -138,77 +141,71 @@ internal_setent (const char *file, NSS_DB **dbp)
       err = DL_CALL_FCT (libdb_db_open,
 			 (file, DB_BTREE, DB_RDONLY, 0, NULL, NULL, &db));
 
+      if (err != 0)
+	{
+	  __set_errno (err);
+	  *dbp = NULL;
+	  return err == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
+	}
+      
       /* Construct the object we pass up.  */
       *dbp = (NSS_DB *) malloc (sizeof (NSS_DB));
-      if (*dbp != NULL)
+      if (*dbp == NULL)
+	return NSS_STATUS_UNAVAIL;
+	  
+      (*dbp)->db = db;
+
+      /* The functions are at different positions for the different
+	 versions.  Sigh.  */
+      switch (libdb_version)
 	{
-	  (*dbp)->db = db;
-
-	  /* The functions are at different positions for the different
-	     versions.  Sigh.  */
-	  switch (libdb_version)
-	    {
-	    case db24:
-	      (*dbp)->close =
-		(int (*) (void *, uint32_t)) ((struct db24 *) db)->close;
-	      (*dbp)->fd =
-		(int (*) (void *, int *)) ((struct db24 *) db)->fd;
-	      (*dbp)->get =
-		(int (*) (void *, void *, void *, void *, uint32_t))
-		((struct db24 *) db)->get;
-	      break;
-	    case db27:
-	      (*dbp)->close =
-		(int (*) (void *, uint32_t)) ((struct db27 *) db)->close;
-	      (*dbp)->fd =
-		(int (*) (void *, int *)) ((struct db27 *) db)->fd;
-	      (*dbp)->get =
-		(int (*) (void *, void *, void *, void *, uint32_t))
-		((struct db27 *) db)->get;
-	      break;
-	    default:
-	      abort ();
-	    }
+	case db24:
+	  (*dbp)->close =
+	    (int (*) (void *, uint32_t)) ((struct db24 *) db)->close;
+	  (*dbp)->fd =
+	    (int (*) (void *, int *)) ((struct db24 *) db)->fd;
+	  (*dbp)->get =
+	    (int (*) (void *, void *, void *, void *, uint32_t))
+	    ((struct db24 *) db)->get;
+	  break;
+	case db27:
+	  (*dbp)->close =
+	    (int (*) (void *, uint32_t)) ((struct db27 *) db)->close;
+	  (*dbp)->fd =
+	    (int (*) (void *, int *)) ((struct db27 *) db)->fd;
+	  (*dbp)->get =
+	    (int (*) (void *, void *, void *, void *, uint32_t))
+	    ((struct db27 *) db)->get;
+	  break;
+	default:
+	  abort ();
 	}
 
+      /* We have to make sure the file is `closed on exec'.  */
+      err = DL_CALL_FCT ((*dbp)->fd, (db, &fd));
       if (err != 0)
 	{
 	  __set_errno (err);
-	  *dbp = NULL;
-	  status = err == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
+	  result = -1;
 	}
       else
 	{
-	  /* We have to make sure the file is `closed on exec'.  */
-	  int fd;
-	  int result;
-
-	  err = DL_CALL_FCT ((*dbp)->fd, (db, &fd));
-	  if (err != 0)
-	    {
-	      __set_errno (err);
-	      result = -1;
-	    }
-	  else
-	    {
-	      int flags = result = fcntl (fd, F_GETFD, 0);
+	  int flags = result = fcntl (fd, F_GETFD, 0);
 
-	      if (result >= 0)
-		{
-		  flags |= FD_CLOEXEC;
-		  result = fcntl (fd, F_SETFD, flags);
-		}
-	    }
-	  if (result < 0)
+	  if (result >= 0)
 	    {
-	      /* Something went wrong.  Close the stream and return a
-		 failure.  */
-	      DL_CALL_FCT ((*dbp)->close, (db, 0));
-	      status = NSS_STATUS_UNAVAIL;
+	      flags |= FD_CLOEXEC;
+	      result = fcntl (fd, F_SETFD, flags);
 	    }
-
-	  if (result < 0)
-	    *dbp = NULL;
+	}
+      if (result < 0)
+	{
+	  /* Something went wrong.  Close the stream and return a
+	     failure.  */
+	  DL_CALL_FCT ((*dbp)->close, (db, 0));
+	  status = NSS_STATUS_UNAVAIL;
+	  free (*dbp);
+	  *dbp = NULL;
 	}
     }
 
diff --git a/nss/nss_db/dummy-db.h b/nss/nss_db/dummy-db.h
index 600d51d984..6ac8b77bb1 100644
--- a/nss/nss_db/dummy-db.h
+++ b/nss/nss_db/dummy-db.h
@@ -70,6 +70,7 @@ struct db24
   int (*put) (void *, void *, DBT *, DBT *, uint32_t);
   int (*stat) (void *, void *, void *(*)(size_t), uint32_t);
   int (*sync) (void *, uint32_t);
+  uint32_t flags;
 };
 
 
@@ -99,6 +100,7 @@ struct db27
   void	*mutexp;
   enum { dummy27 } type;
   int byteswapped;
+  int saved_open_fd;
   void *dbenv;
   void *mp_dbenv;
   void *internal;
@@ -114,9 +116,6 @@ struct db27
     void *tqh_first;
     void **tqh_last;
   } active_queue;
-  struct {
-    void *lh_first;
-  } handleq;
   uint8_t fileid[20];
   uint32_t log_fileid;
   size_t pgsize;
@@ -130,9 +129,11 @@ struct db27
   int (*del) (void *, void *, DBT *, uint32_t);
   int (*fd) (void *, int *);
   int (*get) (void *, void *, DBT *, DBT *, uint32_t);
+  int (*join) (void *, void **, uint32_t, void **);  
   int (*put) (void *, void *, DBT *, DBT *, uint32_t);
   int (*stat) (void *, void *, void *(*)(size_t), uint32_t);
   int (*sync) (void *, uint32_t);
+  uint32_t flags;
 };
 
 
@@ -148,7 +149,10 @@ struct dbc27
   uint32_t lid;
   uint32_t locker;
   DBT lock_dbt;
-  uint32_t lock[14];
+  struct{
+    uint32_t pgno;
+    uint8_t fileid[20];
+  } lock;
   size_t mylock;
   DBT rkey;
   DBT rdata;