111
|
1 /* Extracted from the sdm module in perl. */
|
145
|
2
|
|
3 /* { dg-require-stack-size "12*2+8+1024+8" } */
|
|
4
|
111
|
5 typedef struct {
|
|
6 char *dptr;
|
|
7 int dsize;
|
|
8 } datum;
|
|
9 extern long sdbm_hash (char *, int) ;
|
|
10 extern void sdbm__putpair (char *, datum, datum) ;
|
|
11 void
|
|
12 sdbm__splpage (char *pag, char *New, long int sbit)
|
|
13 {
|
|
14 datum key;
|
|
15 datum val;
|
|
16 register int n;
|
|
17 register int off = 1024 ;
|
|
18 char cur[1024 ];
|
|
19 register short *ino = (short *) cur;
|
|
20 (void) memcpy(cur, pag, 1024 );
|
|
21 (void) ({ void *__s = ( pag ); __builtin_memset ( __s , '\0', 1024 ) ; __s; });
|
|
22 (void) ({ void *__s = ( New ); __builtin_memset ( __s , '\0', 1024 ) ; __s; });
|
|
23 n = ino[0];
|
|
24 for (ino++; n > 0; ino += 2) {
|
|
25 key.dptr = cur + ino[0];
|
|
26 key.dsize = off - ino[0];
|
|
27 val.dptr = cur + ino[1];
|
|
28 val.dsize = ino[0] - ino[1];
|
|
29 (void) sdbm__putpair ((sdbm_hash(( key ).dptr, ( key ).dsize) & sbit) ? New : pag, key, val);
|
|
30 off = ino[1];
|
|
31 n -= 2;
|
|
32 }
|
|
33 }
|