www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2004/01/26/05:31:02

X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f
Date: Mon, 26 Jan 2004 12:30:45 +0200 (EET)
From: Esa A E Peuha <peuha AT cc DOT helsinki DOT fi>
Sender: peuha AT sirppi DOT helsinki DOT fi
To: djgpp-workers AT delorie DOT com
Subject: Re: Patch for bsearch
In-Reply-To: <uy8rvujzd.fsf@elta.co.il>
Message-ID: <Pine.OSF.4.58.0401261228170.10485@sirppi.helsinki.fi>
References: <Pine DOT OSF DOT 4 DOT 58 DOT 0401201143590 DOT 29095 AT sirppi DOT helsinki DOT fi>
<200401201626 DOT i0KGQ7d8026812 AT envy DOT delorie DOT com> <Pine DOT OSF DOT 4 DOT 58 DOT 0401231150080 DOT 23983 AT sirppi DOT helsinki DOT fi>
<2719-Fri23Jan2004144638+0200-eliz AT elta DOT co DOT il> <200401231353 DOT i0NDrU74021571 AT envy DOT delorie DOT com>
<Pine DOT OSF DOT 4 DOT 58 DOT 0401261046390 DOT 11387 AT sirppi DOT helsinki DOT fi> <uy8rvujzd DOT fsf AT elta DOT co DOT il>
MIME-Version: 1.0
Reply-To: djgpp-workers AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: djgpp-workers AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

On Mon, 26 Jan 2004, Eli Zaretskii wrote:

> I'd prefer that the part that does pointer arithmetics would still
> cast the pointer to a char *.

Like this?

Index: bsearch.c
===================================================================
RCS file: /cvs/djgpp/djgpp/src/libc/ansi/stdlib/bsearch.c,v
retrieving revision 1.1
diff -u -r1.1 bsearch.c
--- bsearch.c	26 Dec 1994 20:35:04 -0000	1.1
+++ bsearch.c	26 Jan 2004 10:26:49 -0000
@@ -3,24 +3,23 @@
 #include <libc/unconst.h>

 void *
-bsearch(const void *key, const void *base0, size_t nelem,
+bsearch(const void *key, const void *base, size_t nelem,
 	size_t size, int (*cmp)(const void *ck, const void *ce))
 {
-  char *base = unconst(base0, char *);
   int lim, cmpval;
-  void *p;
+  const void *p;

   for (lim = nelem; lim != 0; lim >>= 1)
   {
-    p = base + (lim >> 1) * size;
+    p = (const char *)base + (lim >> 1) * size;
     cmpval = (*cmp)(key, p);
     if (cmpval == 0)
-      return p;
+      return unconst(p, void *);
     if (cmpval > 0)
     {				/* key > p: move right */
-      base = (char *)p + size;
+      base = (const char *)p + size;
       lim--;
     } /* else move left */
   }
-  return 0;
+  return NULL;
 }

-- 
Esa Peuha
student of mathematics at the University of Helsinki
http://www.helsinki.fi/~peuha/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019