From: Howard Chu Date: Fri, 12 Aug 2011 00:33:28 +0000 (-0700) Subject: Rename idl to midl X-Git-Tag: OPENLDAP_REL_ENG_2_4_27~148^2~111 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=985f765dc53621f8db910737f677261de4562433;p=openldap Rename idl to midl --- diff --git a/libraries/libmdb/Makefile b/libraries/libmdb/Makefile index 3948905a57..16cec0d7f0 100644 --- a/libraries/libmdb/Makefile +++ b/libraries/libmdb/Makefile @@ -14,22 +14,22 @@ test: all mkdir testdb ./mtest && ./mdb_stat testdb -libmdb.a: mdb.o idl.o - ar rs $@ mdb.o idl.o +libmdb.a: mdb.o midl.o + ar rs $@ mdb.o midl.o -libmdb.so: mdb.o idl.o - gcc -shared -o $@ mdb.o idl.o +libmdb.so: mdb.o midl.o + gcc -shared -o $@ mdb.o midl.o mdb_stat: mdb_stat.o libmdb.a mtest: mtest.o libmdb.a mtest2: mtest2.o libmdb.a mtest3: mtest3.o libmdb.a -mdb.o: mdb.c mdb.h idl.h +mdb.o: mdb.c mdb.h midl.h $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c mdb.c -idl.o: idl.c idl.h - $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c idl.c +midl.o: midl.c midl.h + $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c midl.c %: %.o $(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@ diff --git a/libraries/libmdb/idl.c b/libraries/libmdb/idl.c deleted file mode 100644 index 7fc39c0072..0000000000 --- a/libraries/libmdb/idl.c +++ /dev/null @@ -1,109 +0,0 @@ -/* idl.c - ldap bdb back-end ID list functions */ -/* $OpenLDAP$ */ -/* This work is part of OpenLDAP Software . - * - * Copyright 2000-2011 The OpenLDAP Foundation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted only as authorized by the OpenLDAP - * Public License. - * - * A copy of this license is available in the file LICENSE in the - * top-level directory of the distribution or, alternatively, at - * . - */ - -#include -#include -#include -#include "idl.h" - -typedef unsigned long pgno_t; - -/* Sort the IDLs from highest to lowest */ -#define IDL_CMP(x,y) ( x > y ? -1 : ( x < y ? 1 : 0 ) ) - -unsigned mdb_idl_search( ID *ids, ID id ) -{ - /* - * binary search of id in ids - * if found, returns position of id - * if not found, returns first position greater than id - */ - unsigned base = 0; - unsigned cursor = 0; - int val = 0; - unsigned n = ids[0]; - - while( 0 < n ) { - int pivot = n >> 1; - cursor = base + pivot; - val = IDL_CMP( id, ids[cursor + 1] ); - - if( val < 0 ) { - n = pivot; - - } else if ( val > 0 ) { - base = cursor + 1; - n -= pivot + 1; - - } else { - return cursor + 1; - } - } - - if( val > 0 ) { - return cursor + 2; - } else { - return cursor + 1; - } -} - -int mdb_idl_insert( ID *ids, ID id ) -{ - unsigned x; - - if (MDB_IDL_IS_RANGE( ids )) { - /* if already in range, treat as a dup */ - if (id >= MDB_IDL_FIRST(ids) && id <= MDB_IDL_LAST(ids)) - return -1; - if (id < MDB_IDL_FIRST(ids)) - ids[1] = id; - else if (id > MDB_IDL_LAST(ids)) - ids[2] = id; - return 0; - } - - x = mdb_idl_search( ids, id ); - assert( x > 0 ); - - if( x < 1 ) { - /* internal error */ - return -2; - } - - if ( x <= ids[0] && ids[x] == id ) { - /* duplicate */ - return -1; - } - - if ( ++ids[0] >= MDB_IDL_DB_MAX ) { - if( id < ids[1] ) { - ids[1] = id; - ids[2] = ids[ids[0]-1]; - } else if ( ids[ids[0]-1] < id ) { - ids[2] = id; - } else { - ids[2] = ids[ids[0]-1]; - } - ids[0] = NOID; - - } else { - /* insert id */ - AC_MEMCPY( &ids[x+1], &ids[x], (ids[0]-x) * sizeof(ID) ); - ids[x] = id; - } - - return 0; -} diff --git a/libraries/libmdb/idl.h b/libraries/libmdb/idl.h deleted file mode 100644 index 1a51df4850..0000000000 --- a/libraries/libmdb/idl.h +++ /dev/null @@ -1,78 +0,0 @@ -/* idl.h - ldap bdb back-end ID list header file */ -/* $OpenLDAP$ */ -/* This work is part of OpenLDAP Software . - * - * Copyright 2000-2011 The OpenLDAP Foundation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted only as authorized by the OpenLDAP - * Public License. - * - * A copy of this license is available in the file LICENSE in the - * top-level directory of the distribution or, alternatively, at - * . - */ - -#ifndef _MDB_IDL_H_ -#define _MDB_IDL_H_ - -#define AC_MEMCPY(dst,src,size) memcpy(dst,src,size) - -#define ID unsigned long -#define NOID ((ID)~0) - -/* IDL sizes - likely should be even bigger - * limiting factors: sizeof(ID), thread stack size - */ -#define MDB_IDL_LOGN 16 /* DB_SIZE is 2^16, UM_SIZE is 2^17 */ -#define MDB_IDL_DB_SIZE (1<bi_lastid) ) -#define MDB_IDL_ALL( bdb, ids ) MDB_IDL_RANGE( ids, 1, ((bdb)->bi_lastid) ) - -#define MDB_IDL_FIRST( ids ) ( ids[1] ) -#define MDB_IDL_LAST( ids ) ( MDB_IDL_IS_RANGE(ids) \ - ? ids[2] : ids[ids[0]] ) - -#define MDB_IDL_N( ids ) ( MDB_IDL_IS_RANGE(ids) \ - ? (ids[2]-ids[1])+1 : ids[0] ) - -int mdb_idl_insert( ID *ids, ID id ); - -#endif diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 489bbde656..b601d5d48d 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -54,7 +54,7 @@ #define ULONG unsigned long typedef ULONG pgno_t; -#include "idl.h" +#include "midl.h" #ifndef DEBUG #define DEBUG 1 @@ -580,7 +580,7 @@ mdb_touch(MDB_txn *txn, MDB_pageparent *pp) if ((dp = mdb_alloc_page(txn, pp->mp_parent, pp->mp_pi, 1)) == NULL) return ENOMEM; DPRINTF("touched page %lu -> %lu", mp->mp_pgno, dp->p.mp_pgno); - mdb_idl_insert(txn->mt_free_pgs, mp->mp_pgno); + mdb_midl_insert(txn->mt_free_pgs, mp->mp_pgno); pgno = dp->p.mp_pgno; memcpy(&dp->p, mp, txn->mt_env->me_psize); mp = &dp->p; @@ -2682,7 +2682,7 @@ mdb_del0(MDB_txn *txn, MDB_dbi dbi, unsigned int ki, MDB_pageparent *mpp, MDB_no ovpages = OVPAGES(NODEDSZ(leaf), txn->mt_env->me_psize); for (i=0; imt_free_pgs, pg); + mdb_midl_insert(txn->mt_free_pgs, pg); pg++; } } @@ -2764,7 +2764,7 @@ mdb_del(MDB_txn *txn, MDB_dbi dbi, while (parent != NULL) { for (i=0; imp_page); i++) { ni = NODEPTR(top->mp_page, i); - mdb_idl_insert(txn->mt_free_pgs, ni->mn_pgno); + mdb_midl_insert(txn->mt_free_pgs, ni->mn_pgno); } if (parent) { parent->mp_ki++; @@ -2779,7 +2779,7 @@ mdb_del(MDB_txn *txn, MDB_dbi dbi, } } } - mdb_idl_insert(txn->mt_free_pgs, mx.mx_txn.mt_dbs[mx.mx_cursor.mc_dbi].md_root); + mdb_midl_insert(txn->mt_free_pgs, mx.mx_txn.mt_dbs[mx.mx_cursor.mc_dbi].md_root); } } } diff --git a/libraries/libmdb/midl.c b/libraries/libmdb/midl.c new file mode 100644 index 0000000000..8b39acad65 --- /dev/null +++ b/libraries/libmdb/midl.c @@ -0,0 +1,109 @@ +/* idl.c - ldap bdb back-end ID list functions */ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software . + * + * Copyright 2000-2011 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . + */ + +#include +#include +#include +#include "midl.h" + +typedef unsigned long pgno_t; + +/* Sort the IDLs from highest to lowest */ +#define IDL_CMP(x,y) ( x > y ? -1 : ( x < y ? 1 : 0 ) ) + +unsigned mdb_midl_search( ID *ids, ID id ) +{ + /* + * binary search of id in ids + * if found, returns position of id + * if not found, returns first position greater than id + */ + unsigned base = 0; + unsigned cursor = 0; + int val = 0; + unsigned n = ids[0]; + + while( 0 < n ) { + int pivot = n >> 1; + cursor = base + pivot; + val = IDL_CMP( id, ids[cursor + 1] ); + + if( val < 0 ) { + n = pivot; + + } else if ( val > 0 ) { + base = cursor + 1; + n -= pivot + 1; + + } else { + return cursor + 1; + } + } + + if( val > 0 ) { + return cursor + 2; + } else { + return cursor + 1; + } +} + +int mdb_midl_insert( ID *ids, ID id ) +{ + unsigned x; + + if (MDB_IDL_IS_RANGE( ids )) { + /* if already in range, treat as a dup */ + if (id >= MDB_IDL_FIRST(ids) && id <= MDB_IDL_LAST(ids)) + return -1; + if (id < MDB_IDL_FIRST(ids)) + ids[1] = id; + else if (id > MDB_IDL_LAST(ids)) + ids[2] = id; + return 0; + } + + x = mdb_midl_search( ids, id ); + assert( x > 0 ); + + if( x < 1 ) { + /* internal error */ + return -2; + } + + if ( x <= ids[0] && ids[x] == id ) { + /* duplicate */ + return -1; + } + + if ( ++ids[0] >= MDB_IDL_DB_MAX ) { + if( id < ids[1] ) { + ids[1] = id; + ids[2] = ids[ids[0]-1]; + } else if ( ids[ids[0]-1] < id ) { + ids[2] = id; + } else { + ids[2] = ids[ids[0]-1]; + } + ids[0] = NOID; + + } else { + /* insert id */ + AC_MEMCPY( &ids[x+1], &ids[x], (ids[0]-x) * sizeof(ID) ); + ids[x] = id; + } + + return 0; +} diff --git a/libraries/libmdb/midl.h b/libraries/libmdb/midl.h new file mode 100644 index 0000000000..aeb0af6203 --- /dev/null +++ b/libraries/libmdb/midl.h @@ -0,0 +1,78 @@ +/* idl.h - ldap bdb back-end ID list header file */ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software . + * + * Copyright 2000-2011 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . + */ + +#ifndef _MDB_MIDL_H_ +#define _MDB_MIDL_H_ + +#define AC_MEMCPY(dst,src,size) memcpy(dst,src,size) + +#define ID unsigned long +#define NOID ((ID)~0) + +/* IDL sizes - likely should be even bigger + * limiting factors: sizeof(ID), thread stack size + */ +#define MDB_IDL_LOGN 16 /* DB_SIZE is 2^16, UM_SIZE is 2^17 */ +#define MDB_IDL_DB_SIZE (1<bi_lastid) ) +#define MDB_IDL_ALL( bdb, ids ) MDB_IDL_RANGE( ids, 1, ((bdb)->bi_lastid) ) + +#define MDB_IDL_FIRST( ids ) ( ids[1] ) +#define MDB_IDL_LAST( ids ) ( MDB_IDL_IS_RANGE(ids) \ + ? ids[2] : ids[ids[0]] ) + +#define MDB_IDL_N( ids ) ( MDB_IDL_IS_RANGE(ids) \ + ? (ids[2]-ids[1])+1 : ids[0] ) + +int mdb_midl_insert( ID *ids, ID id ); + +#endif /* _MDB_MIDL_H_ */