1 /* 2 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 7 /* All Rights Reserved */ 8 9 /* 10 * Copyright (c) 1980 Regents of the University of California. 11 * All rights reserved. The Berkeley software License Agreement 12 * specifies the terms and conditions for redistribution. 13 */ 14 15 #pragma ident "%Z%%M% %I% %E% SMI" 16 17 #include <stdio.h> 18 #include <locale.h> 19 20 extern void err(); 21 22 int 23 recopy(FILE *ft, FILE *fb, FILE *fa, int nhash) 24 { 25 /* copy fb (old hash items/pointers) to ft (new ones) */ 26 int n, i, iflong; 27 long getl(); 28 int getw(); 29 int *hpt_s; 30 int (*getfun)(); 31 long *hpt_l; 32 long k, lp; 33 if (fa == NULL) { 34 err(gettext("No old pointers"), 0); 35 return (0); 36 } 37 fread(&n, sizeof (n), 1, fa); 38 fread(&iflong, sizeof (iflong), 1, fa); 39 if (iflong) { 40 hpt_l = (long *)calloc(sizeof (*hpt_l), n+1); 41 n = fread(hpt_l, sizeof (*hpt_l), n, fa); 42 } else { 43 hpt_s = (int *)calloc(sizeof (*hpt_s), n+1); 44 n = fread(hpt_s, sizeof (*hpt_s), n, fa); 45 } 46 if (n != nhash) 47 fprintf(stderr, gettext("Changing hash value to old %d\n"), n); 48 fclose(fa); 49 if (iflong) 50 getfun = (int(*)())getl; 51 else 52 getfun = getw; 53 for (i = 0; i < n; i++) { 54 if (iflong) 55 lp = hpt_l[i]; 56 else 57 lp = hpt_s[i]; 58 fseek(fb, lp, 0); 59 while ((k = (*getfun)(fb)) != -1) 60 fprintf(ft, "%04d %06ld\n", i, k); 61 } 62 fclose(fb); 63 return (n); 64 } 65