summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--nscd/connections.c8
-rw-r--r--nscd/nscd_getgr_r.c13
-rw-r--r--sysdeps/i386/bits/byteswap.h8
4 files changed, 29 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 532f003e20..e2449b29c5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+1998-07-25  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/i386/bits/byteswap.h (__bswap_64): Change __v to __w to
+	prevent conflict with __bswap_32.
+
 1998-07-24 21:29  Ulrich Drepper  <drepper@cygnus.com>
 
 	* nscd/connections.c (pw_send_answer): Make one single writev call.
diff --git a/nscd/connections.c b/nscd/connections.c
index e11132c514..582a6cf8f0 100644
--- a/nscd/connections.c
+++ b/nscd/connections.c
@@ -502,6 +502,14 @@ gr_send_answer (int conn, struct group *grp)
     }
 
   /* Send all the data.  */
+  while (nblocks > UIO_MAXIOV)
+    {
+      if (writev (sock[conn], vec, UIO_MAXIOV) != total_len)
+	dbg_log (_("write incomplete on send group answer: %s"),
+		 strerror (errno));
+      vec += UIO_MAXIOV;
+      nblocks -= UIO_MAXIOV;
+    }
   if (writev (sock[conn], vec, nblocks) != total_len)
     dbg_log (_("write incomplete on send group answer: %s"),
 	     strerror (errno));
diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c
index 9b3022c764..85ebb0dc60 100644
--- a/nscd/nscd_getgr_r.c
+++ b/nscd/nscd_getgr_r.c
@@ -232,7 +232,18 @@ __nscd_getgr_r (const char *key, request_type type, struct group *resultbuf,
 	      *p++ = '\0';
 	    }
 
-	  if (__readv (sock, vec, gr_resp.gr_mem_len) != total_len)
+	  while (i > UIO_MAXIOV)
+	    {
+	      if (__readv (sock, vec, UIO_MAXIOV) != total_len)
+		{
+		  __close (sock);
+		  return -1;
+		}
+	      vec += UIO_MAXIOV;
+	      i -= UIO_MAXIOV;
+	    }
+
+	  if (__readv (sock, vec, i) != total_len)
 	    {
 	      __close (sock);
 	      return -1;
diff --git a/sysdeps/i386/bits/byteswap.h b/sysdeps/i386/bits/byteswap.h
index 1eef351a0c..760e0751c9 100644
--- a/sysdeps/i386/bits/byteswap.h
+++ b/sysdeps/i386/bits/byteswap.h
@@ -83,9 +83,9 @@
 /* Swap bytes in 64 bit value.  */
 # define __bswap_64(x) \
      ({ union { unsigned long long int __ll;				      \
-		unsigned long int __l[2]; } __v, __r;			      \
-        __v.__ll = (x);							      \
-	__r.__l[0] = __bswap_32 (__v.__l[1]);				      \
-	__r.__l[1] = __bswap_32 (__v.__l[0]);				      \
+		unsigned long int __l[2]; } __w, __r;			      \
+        __w.__ll = (x);							      \
+	__r.__l[0] = __bswap_32 (__w.__l[1]);				      \
+	__r.__l[1] = __bswap_32 (__w.__l[0]);				      \
 	__r.__ll; })
 #endif