$NetBSD: patch-ac,v 1.2 2006/08/04 22:59:02 rillig Exp $ --- same.c.orig 2004-07-16 19:30:01.000000000 +0200 +++ same.c 2006-08-05 00:57:39.680842400 +0200 @@ -106,10 +106,9 @@ * - There is a 1024 (BUFSIZE) character limit to pathnames when using * symlinks. * - * - The same source is not exactly 32kbytes long. However this comment - * seems to fix that. * */ +#define _FILE_OFFSET_BITS 64 #include #include @@ -123,16 +122,8 @@ #include #include #include - -#define __USE_LARGEFILE64 #include -#if 1 -/* Why the *&^#$ doesn't sys/stat define this??? */ -extern int lstat64 (__const char *__restrict __file, - struct stat64 *__restrict __buf) __THROW; -#endif - #ifdef __linux__ #include #else /* !__linux__ */ @@ -157,6 +148,11 @@ extern int lstat64 (__const char *__rest #define true 1 #define false 0 +#if defined(__GNUC__) +# define attribute_unused __attribute__((__unused__)) +#else +# define attribute_unused /**/ +#endif static volatile int stop; static volatile int doing_input; @@ -184,7 +180,7 @@ static const char *o_cache; struct name_entry { struct name_entry *next; - char name[0]; + char name[1]; }; #define F_CRC_VALID (1 << 0) @@ -196,7 +192,7 @@ struct inode_entry { struct name_entry *names; int flags; /* See F_* definitions above */ /* The two fields below may have been read from the cache */ - loff_t size; + off_t size; unsigned int crc; /* valid if flags & F_CRC_VALID only */ /* The four fields below are valid if flags & F_STAT_VALID only */ dev_t device; @@ -288,7 +284,7 @@ static void read_list(void); static const char *get_fname(void); static struct inode_entry *get_entry(void); static int __get_stat(struct inode_entry *entry); -static unsigned int calc_hash(const struct stat64 *sb); +static unsigned int calc_hash(const struct stat *sb); static int __get_crc(struct inode_entry *entry); static int cmp(const struct inode_entry *entry1, const struct inode_entry *entry2); @@ -379,7 +375,7 @@ static void dump_inode_entry(const struc printf("%sentry %p size %lu crc %08x device %lx inode %lx nlink %d uid " "%lx\n", - indent, entry, (unsigned long)entry->size, entry->crc, + indent, (void *)entry, (unsigned long)entry->size, entry->crc, (unsigned long)entry->device, (unsigned long)entry->inode, entry->nlink, (unsigned long)entry->uid); for (names = entry->names; names; names = names->next) @@ -429,7 +425,7 @@ static void load_cache(void) gzFile *in; unsigned long line = 0; char *s; - loff_t size; + off_t size; unsigned int crc; const char *name; unsigned int hash = 0; @@ -659,7 +655,7 @@ static struct name_entry *alloc_name_ent return entry; } -static void delete_name_entry(struct name_entry *entry __attribute__((__unused__))) +static void delete_name_entry(struct name_entry *entry attribute_unused) { /* * We don't free names allocated from the pool @@ -1168,7 +1164,7 @@ static struct inode_entry *get_entry(voi { const char *buf; struct inode_entry *entry; - struct stat64 sb; + struct stat sb; unsigned int hash; do { @@ -1176,7 +1172,7 @@ static struct inode_entry *get_entry(voi if (buf == NULL) return NULL; stat_stat++; - if (lstat64(buf, &sb) < 0) { + if (lstat(buf, &sb) < 0) { fprintf(stderr, "stat %s: %s\n", buf, strerror(errno)); exit(1); } @@ -1204,13 +1200,13 @@ static struct inode_entry *get_entry(voi static int __get_stat(struct inode_entry *entry) { - struct stat64 sb; + struct stat sb; struct name_entry *name; /* Loop until we find a file that does exist */ while ((name = entry->names) != 0) { stat_stat++; - if (lstat64(name->name, &sb) < 0) + if (lstat(name->name, &sb) < 0) fprintf(stderr, "stat %s: %s\n", name->name, strerror(errno)); else if (S_ISREG(sb.st_mode)) { entry->device = sb.st_dev; @@ -1231,7 +1227,7 @@ static int __get_stat(struct inode_entry * Calculate the Hash Value for an Inode Entry */ -static unsigned int calc_hash(const struct stat64 *sb) +static unsigned int calc_hash(const struct stat *sb) { return (sb->st_size) % MAXHASH; } @@ -1256,7 +1252,7 @@ static int __get_crc(struct inode_entry } while ((n = read(f1, b1, BUFSIZE)) > 0) - crc = crc32(crc, b1, n); + crc = crc32(crc, (void *)b1, n); close(f1); if (n < 0) { fprintf(stderr, "read %s: %s\n", entry->names->name, strerror(errno));