summaryrefslogtreecommitdiffstats
path: root/common/sys
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-03-31 20:46:22 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-03-31 20:46:22 +0800
commite755863dc764c11e2ee28daf05df6f53bf9be0f4 (patch)
treebdd2af4b2bbb01971be0438d25c8effdc344515c /common/sys
parentd1354633ba59924f118d8bae55d1a1e281629c23 (diff)
downloadpttbbs-e755863dc764c11e2ee28daf05df6f53bf9be0f4.tar
pttbbs-e755863dc764c11e2ee28daf05df6f53bf9be0f4.tar.gz
pttbbs-e755863dc764c11e2ee28daf05df6f53bf9be0f4.tar.bz2
pttbbs-e755863dc764c11e2ee28daf05df6f53bf9be0f4.tar.lz
pttbbs-e755863dc764c11e2ee28daf05df6f53bf9be0f4.tar.xz
pttbbs-e755863dc764c11e2ee28daf05df6f53bf9be0f4.tar.zst
pttbbs-e755863dc764c11e2ee28daf05df6f53bf9be0f4.zip
- (internal) enable building utmpserver
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4053 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'common/sys')
-rw-r--r--common/sys/sort.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/common/sys/sort.c b/common/sys/sort.c
index edecc0a8..d649b9e4 100644
--- a/common/sys/sort.c
+++ b/common/sys/sort.c
@@ -1,3 +1,4 @@
+#include <stdio.h>
int cmp_int(const void *a, const void *b)
{
@@ -8,3 +9,45 @@ int cmp_int_desc(const void * a, const void * b)
{
return cmp_int(b, a);
}
+
+int *
+intbsearch(int key, const int *base0, int nmemb)
+{
+ /* 改自 /usr/src/lib/libc/stdlib/bsearch.c ,
+ 專給搜 int array 用的, 不透過 compar function 故較快些 */
+ const char *base = (const char *)base0;
+ size_t lim;
+ int *p;
+
+ for (lim = nmemb; lim != 0; lim >>= 1) {
+ p = (int *)(base + (lim >> 1) * 4);
+ if( key == *p )
+ return p;
+ if( key > *p ){/* key > p: move right */
+ base = (char *)p + 4;
+ lim--;
+ } /* else move left */
+ }
+ return (NULL);
+}
+
+unsigned int *
+uintbsearch(const unsigned int key, const unsigned int *base0, const int nmemb)
+{
+ /* 改自 /usr/src/lib/libc/stdlib/bsearch.c ,
+ 專給搜 int array 用的, 不透過 compar function 故較快些 */
+ const char *base = (const char *)base0;
+ size_t lim;
+ unsigned int *p;
+
+ for (lim = nmemb; lim != 0; lim >>= 1) {
+ p = (unsigned int *)(base + (lim >> 1) * 4);
+ if( key == *p )
+ return p;
+ if( key > *p ){/* key > p: move right */
+ base = (char *)p + 4;
+ lim--;
+ } /* else move left */
+ }
+ return (NULL);
+}