| /* Extracted from the sdm module in perl. */ |
| typedef struct { |
| char *dptr; |
| int dsize; |
| } datum; |
| extern long sdbm_hash (char *, int) ; |
| extern void sdbm__putpair (char *, datum, datum) ; |
| void |
| sdbm__splpage (char *pag, char *New, long int sbit) |
| { |
| datum key; |
| datum val; |
| register int n; |
| register int off = 1024 ; |
| char cur[1024 ]; |
| register short *ino = (short *) cur; |
| (void) memcpy(cur, pag, 1024 ); |
| (void) ({ void *__s = ( pag ); __builtin_memset ( __s , '\0', 1024 ) ; __s; }); |
| (void) ({ void *__s = ( New ); __builtin_memset ( __s , '\0', 1024 ) ; __s; }); |
| n = ino[0]; |
| for (ino++; n > 0; ino += 2) { |
| key.dptr = cur + ino[0]; |
| key.dsize = off - ino[0]; |
| val.dptr = cur + ino[1]; |
| val.dsize = ino[0] - ino[1]; |
| (void) sdbm__putpair ((sdbm_hash(( key ).dptr, ( key ).dsize) & sbit) ? New : pag, key, val); |
| off = ino[1]; |
| n -= 2; |
| } |
| } |