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