32 #if defined(LIBC_SCCS) && !defined(lint) 33 static char sccsid[] =
"@(#)ndbm.c 5.3 (Berkeley) 3/9/86";
45 #include <sys/types.h> 54 # define bcopy(a,b,c) memmove(b,a,c) 77 if ((db = (
DBM *)
malloc(
sizeof *db)) == 0)
87 if ((flags & 03) == O_WRONLY)
88 flags = (flags & ~03) | O_RDWR;
89 strcpy(db->dbm_pagbuf, file);
90 strcat(db->dbm_pagbuf,
".pag");
91 db->dbm_pagf =
si_open(db->dbm_pagbuf, flags, mode);
94 strcpy(db->dbm_pagbuf, file);
95 strcat(db->dbm_pagbuf,
".dir");
96 db->dbm_dirf =
si_open(db->dbm_pagbuf, flags, mode);
100 db->dbm_maxbno = statb.st_size*
BYTESIZ-1;
101 db->dbm_pagbno = db->dbm_dirbno = -1;
104 (void) si_close(db->dbm_pagf);
234 fprintf(stderr,
"ndbm: split not paired\n");
238 if (!
additem(ovfbuf, item, item1) ||
299 if (item.dptr !=
NULL)
340 register int b,
i, n;
362 register int i, n,
b;
391 if ((
unsigned)n >= (unsigned)sp[0])
401 item.
dsize = t - sp[n+1];
408 register int i, n,
j;
412 for (i=0, j=sp[0]; i<
j; i+=2, n = sp[
i])
417 if (n == 0 || memcmp(&
buf[sp[i+1]], item.
dptr, n) == 0)
430 = { 61, 57, 53, 49, 45, 41, 37, 33,
431 29, 25, 21, 17, 13, 9, 5, 1,
433 static long hltab[64]
435 06100151277L,06106161736L,06452611562L,05001724107L,
436 02614772546L,04120731531L,04665262210L,07347467531L,
437 06735253126L,06042345173L,03072226605L,01464164730L,
438 03247435524L,07652510057L,01546775256L,05714532133L,
439 06173260402L,07517101630L,02431460343L,01743245566L,
440 00261675137L,02433103631L,03421772437L,04447707466L,
441 04435620103L,03757017115L,03641531772L,06767633246L,
442 02673230344L,00260612216L,04133454451L,00615531516L,
443 06137717526L,02574116560L,02304023373L,07061702261L,
444 05153031405L,05322056705L,07401116734L,06552375715L,
445 06165233473L,05311063631L,01212221723L,01052267235L,
446 06000615237L,01075222665L,06330216006L,04402355630L,
447 01451177262L,02000133436L,06025467062L,07121076461L,
448 03123433522L,01010635225L,01716177066L,05161746527L,
449 01736635071L,06243505026L,03637211610L,01756474365L,
450 04723077174L,03642763134L,05750130273L,03655541561L,
455 register int s, c,
j;
457 register unsigned long hashl;
458 register unsigned int hashi;
462 for (cp = item.
dptr, s=item.
dsize; --s >= 0; )
467 hashi +=
hitab[c&017];
468 hashl +=
hltab[hashi&63];
472 return (
long)(hashl);
480 register short *sp, *sp1;
485 if ((
unsigned)n >= (unsigned)i2 || (n & 1))
502 for (sp1 = sp + sp[0], sp += n+1; sp <= sp1; sp++)
513 register int i1, i2, tmp;
521 tmp = (i2+3) *
sizeof(
short);
522 if (i1 <= tmp)
return (0);
524 sp[++i2] = i1 + item1.
dsize;
539 for (i=0; i<sp[0]; i++)
545 if (t < (sp[0]+1)*
sizeof(short))
int dbm_store(register DBM *db, datum key, datum dat, int replace)
DBM * dbm_open(char *file, int flags, int mode)
const CanonicalForm int s
static void setbit(register DBM *db)
int singular_fstat(int fd, struct stat *buf)
static long dcalchash(datum item)
static int additem(char buf[PBLKSIZ], datum item, datum item1)
static void dbm_access(register DBM *db, long hash)
static datum makdatum(char buf[PBLKSIZ], int n)
static int delitem(char buf[PBLKSIZ], int n)
int status int void * buf
static int finddatum(char buf[PBLKSIZ], datum item)
void * malloc(size_t size)
static int getbit(register DBM *db)
long dbm_forder(register DBM *db, datum key)
datum dbm_fetch(register DBM *db, datum key)
datum dbm_nextkey(register DBM *db)
static CFList split(const CanonicalForm &F, const int m, const Variable &x)
int dbm_delete(register DBM *db, datum key)
datum dbm_firstkey(DBM *db)
int status int void size_t count int const void size_t count const char int flags