151 lines
4.5 KiB
Text
151 lines
4.5 KiB
Text
$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 <assert.h>
|
|
#include <stdio.h>
|
|
@@ -123,16 +122,8 @@
|
|
#include <sys/times.h>
|
|
#include <zlib.h>
|
|
#include <limits.h>
|
|
-
|
|
-#define __USE_LARGEFILE64
|
|
#include <sys/stat.h>
|
|
|
|
-#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 <asm/page.h>
|
|
#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));
|