1 /* Extracted from the sdm module in perl. */
2
3 /* { dg-require-stack-size "12*2+8+1024+8" } */
4
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
sdbm__splpage(char * pag,char * New,long int sbit)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 }
34