summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2003-08-31 14:34:25 +0000
committerLennart Poettering <lennart@poettering.net>2003-08-31 14:34:25 +0000
commitf0f2ed47e265ca01dea3b8a217afc8b45690fc5e (patch)
treedad67a133464335dc96622552c7b039131137832
parent4c3f7894b1e9d48d76eccc382eea93a8ba9b74e9 (diff)
resolv ed conbflict
git-svn-id: file:///home/lennart/svn/public/syrep/trunk@17 07ea20a6-d2c5-0310-9e02-9ef735347d72
-rw-r--r--src/dbstruct.h14
-rw-r--r--src/diff.c5
-rw-r--r--src/list.c12
-rw-r--r--src/makepatch.c2
-rw-r--r--src/package.c40
-rw-r--r--src/syrep.c2
-rw-r--r--src/update.c6
-rw-r--r--src/util.c43
-rw-r--r--src/util.h4
9 files changed, 73 insertions, 55 deletions
diff --git a/src/dbstruct.h b/src/dbstruct.h
index 1b7a9be..2df2aed 100644
--- a/src/dbstruct.h
+++ b/src/dbstruct.h
@@ -26,16 +26,6 @@ struct syrep_meta {
uint32_t last_seen;
};
-/* struct syrep_namels { */
-/* uint32_t last_seen; */
-/* struct syrep_name name; */
-/* }; */
-
-/* struct syrep_mdls { */
-/* uint32_t last_seen; */
-/* struct syrep_md md; */
-/* }; */
-
struct syrep_timestamp {
uint32_t t;
};
@@ -55,8 +45,4 @@ struct syrep_version {
*
*/
-/*
- * syrep_namels :: syrep_md => namels_md
- * syrep_mdls :: syrep_name => mdls_name
- */
#endif
diff --git a/src/diff.c b/src/diff.c
index 54185b2..8338be9 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -81,7 +81,6 @@ static int foreach(DB *ddb, struct syrep_db_context *c1, struct syrep_db_context
if ((md2_valid = get_current_md_by_name(c2, name, &md2)) < 0)
return -1;
-
//fprintf(stderr, "FOREACH %i %i %s\n", md1_valid, md2_valid, name->path);
if (md1_valid && md2_valid) {
@@ -196,6 +195,8 @@ static int enumerate(DB *ddb, struct syrep_db_context *c1, struct syrep_db_conte
fprintf(stderr, "foreach() failed\n");
goto finish;
}
+
+ rotdash();
}
@@ -234,6 +235,8 @@ DB* make_diff(struct syrep_db_context *c1, struct syrep_db_context *c2) {
if (enumerate(ddb, c2, c1) < 0)
goto finish;
+ rotdash_hide();
+
return ddb;
finish:
diff --git a/src/list.c b/src/list.c
index 5f1e5e2..333a780 100644
--- a/src/list.c
+++ b/src/list.c
@@ -52,20 +52,20 @@ static int handle_file(struct syrep_db_context *c, const struct syrep_name *name
fhex(md->digest, SYREP_DIGESTLENGTH, d);
d[SYREP_DIGESTLENGTH*2] = 0;
- fprintf(stderr, "%s %s%s", d, name->path, meta->last_seen == c->version ? "\t\t" : "\t(deleted)");
+ printf("%s %s%s", d, name->path, meta->last_seen == c->version ? "\t\t" : "\t(deleted)");
} else
- fprintf(stderr, "\t%s%s", name->path, meta->last_seen == c->version ? "\t\t" : "\t(deleted)");
+ printf("\t%s%s", name->path, meta->last_seen == c->version ? "\t\t" : "\t(deleted)");
if (args.show_times_flag)
- fprintf(stderr, "\t(first-seen: %u; last-seen: %u)\n", meta->first_seen, meta->last_seen);
+ printf( "\t(first-seen: %u; last-seen: %u)\n", meta->first_seen, meta->last_seen);
else
- fputc('\n', stderr);
+ fputc('\n', stdout);
} else {
char d[SYREP_DIGESTLENGTH*2+1];
fhex(md->digest, SYREP_DIGESTLENGTH, d);
d[SYREP_DIGESTLENGTH*2] = 0;
- fprintf(stderr, "\t%s", name->path);
+ printf("\t%s", name->path);
}
return 0;
@@ -130,7 +130,7 @@ int list(struct syrep_db_context *c) {
char d[SYREP_DIGESTLENGTH*2+1];
fhex(md->digest, SYREP_DIGESTLENGTH, d);
d[SYREP_DIGESTLENGTH*2] = 0;
- fprintf(stderr, "%s:\n", d);
+ printf("%s:\n", d);
memcpy(&previous_md, md, sizeof(previous_md));
}
diff --git a/src/makepatch.c b/src/makepatch.c
index 01af65e..5ae5b29 100644
--- a/src/makepatch.c
+++ b/src/makepatch.c
@@ -59,6 +59,8 @@ static int cb(DB *ddb, struct syrep_name *name, struct diff_entry *de, void *p)
fprintf(stderr, "Adding %s (%s) to patch.\n", name->path, d);
+ /*** MISSING: DO NOT ADD FILES ALREADY EXISTING BY MD5 ***/
+
if (!package_get_item(cb_info->c1->package, d, 0))
if (package_add_file(cb_info->c1->package, d, path) < 0)
return -1;
diff --git a/src/package.c b/src/package.c
index 1375370..0c26fef 100644
--- a/src/package.c
+++ b/src/package.c
@@ -73,14 +73,14 @@ static ssize_t package_write(struct package *p, void *d, size_t l) {
return -1;
}
-static int copy_deflate(struct package *p, int sfd, size_t l) {
+static int copy_deflate(struct package *p, int sfd, off_t l) {
assert(0);
return 0;
}
-static int copy_inflate(struct package *p, int dfd, size_t l) {
+static int copy_inflate(struct package *p, int dfd, off_t l) {
assert(0);
@@ -147,12 +147,14 @@ static void append_item(struct package *p, struct package_item *i) {
p->items = p->last = i;
}
-#define X(i) (((i)<<24)|(((i)<<8)&0x0F00)|(((i)>>8)&0x00F0)|((i)>>24))
+#define X32(i) (((i)<<24)|(((i)<<8)&0x00FF0000)|(((i)>>8)&0x0000FF00)|((i)>>24))
+#define X64(i) (X32((i)>>32)|X32((i)>>32))
static int read_item(struct package *p) {
char name[PACKAGE_ITEMNAMELEN+1];
char path[PATH_MAX] = "";
- uint32_t size;
+ off_t size;
+ uint64_t l;
ssize_t r;
int fd = -1;
struct package_item *i;
@@ -173,7 +175,7 @@ static int read_item(struct package *p) {
goto fail;
}
- if ((r = package_read(p, &size, 4) != 4)) {
+ if ((r = package_read(p, &l, 8) != 8)) {
if (r >= 0)
fprintf(stderr, "Short read\n");
else
@@ -183,8 +185,10 @@ static int read_item(struct package *p) {
}
if (p->x_endianess)
- size = X(size);
+ l = X64(l);
+ size = (off_t) l;
+
snprintf(path, sizeof(path), "%s/%i", p->base, p->count++);
if ((fd = open(path, O_RDWR|O_CREAT|O_EXCL, 0666)) < 0) { /* RDWR for mmap compatibility */
@@ -225,7 +229,8 @@ static int write_item(struct package *p, struct package_item *i) {
char name[PACKAGE_ITEMNAMELEN+1];
ssize_t r;
int fd = -1;
- uint32_t size;
+ off_t size;
+ uint64_t l;
if ((fd = open(i->path, O_RDONLY)) < 0) {
if (errno == ENOENT)
@@ -235,8 +240,9 @@ static int write_item(struct package *p, struct package_item *i) {
goto fail;
}
- if ((size = filesize(fd)) < 0)
+ if ((size = filesize(fd)) == (off_t) -1)
return -1;
+
memset(name, 0, sizeof(name));
strncpy(name, i->name, PACKAGE_ITEMNAMELEN);
@@ -250,7 +256,8 @@ static int write_item(struct package *p, struct package_item *i) {
goto fail;
}
- if ((r = package_write(p, &size, 4) != 4)) {
+ l = (uint64_t) size;
+ if ((r = package_write(p, &l, 8) != 8)) {
if (r >= 0)
fprintf(stderr, "Short write\n");
else
@@ -327,11 +334,11 @@ struct package* package_open(const char *fn, int force) {
if (id == PACKAGE_FILEID)
p->x_endianess = 0;
- else if (id == X(PACKAGE_FILEID))
+ else if (id == X32(PACKAGE_FILEID))
p->x_endianess = 1;
else if (id == PACKAGE_FILEIDCOMPRESSED)
p->x_endianess = !(p->compressed = 1);
- else if (id == X(PACKAGE_FILEIDCOMPRESSED))
+ else if (id == X32(PACKAGE_FILEIDCOMPRESSED))
p->x_endianess = p->compressed = 1;
else {
fprintf(stderr, "%s is not a syrep snapshot or patch\n", fn);
@@ -359,8 +366,11 @@ static int load_complete(struct package *p) {
if (p->read_fd < 0)
return 0;
- while ((r = read_item(p)) > 0);
-
+ while ((r = read_item(p)) > 0)
+ rotdash();
+
+ rotdash_hide();
+
return r;
}
@@ -401,6 +411,8 @@ int package_save(struct package *p, const char *fn) {
if (write_item(p, i) < 0)
goto finish;
+
+ rotdash();
}
r = 0;
@@ -415,6 +427,8 @@ finish:
if (r < 0 && fn)
unlink(fn);
+ rotdash_hide();
+
return r;
}
diff --git a/src/syrep.c b/src/syrep.c
index 03cf5d8..25d939d 100644
--- a/src/syrep.c
+++ b/src/syrep.c
@@ -464,6 +464,8 @@ static void free_args(void) {
int main(int argc, char *argv[]) {
struct sigaction sa;
+ fprintf(stderr, "Compiled with %i Bit off_t\n", sizeof(off_t)*8);
+
memset(&sa, 0, sizeof(sa));
sa.sa_handler = sigint;
sigaction(SIGINT, &sa, NULL);
diff --git a/src/update.c b/src/update.c
index e0e7f9c..0c65d4c 100644
--- a/src/update.c
+++ b/src/update.c
@@ -149,8 +149,7 @@ static int iterate_dir(struct syrep_db_context *c, struct syrep_md_cache *cache,
goto finish;
}
- if (args.progress_flag)
- rotdash();
+ rotdash();
snprintf(p, sizeof(p), "%s/%s", root, de->d_name);
@@ -226,8 +225,7 @@ int update(struct syrep_db_context *c, struct syrep_md_cache *cache) {
if (iterate_dir(c, cache, version, ".") < 0)
return -1;
- if (args.progress_flag)
- rotdash_hide();
+ rotdash_hide();
if (new_version(c, version, now) < 0)
return -1;
diff --git a/src/util.c b/src/util.c
index 5040259..a7118ac 100644
--- a/src/util.c
+++ b/src/util.c
@@ -95,6 +95,9 @@ void rotdash(void) {
static const char dashes[] = /* ".oOo"; */ "|/-\\";
const static char *d = dashes;
+ if (!args.progress_flag)
+ return;
+
if (stderr_tty < 0)
stderr_tty = isatty(fileno(stderr));
@@ -108,6 +111,9 @@ void rotdash(void) {
}
void rotdash_hide(void) {
+ if (!args.progress_flag)
+ return;
+
if (stderr_tty < 0)
stderr_tty = isatty(fileno(stderr));
@@ -156,24 +162,32 @@ int isdirectory(const char *path) {
#ifdef USE_SENDFILE
-static int copy_fd_sendfile(int sfd, int dfd, size_t l) {
+#define MAX_SENDFILE_SIZE (1024*1024*1024) /* A gigabyte */
+
+static int copy_fd_sendfile(int sfd, int dfd, off_t l) {
off_t sfo, o;
- ssize_t r;
if ((sfo = lseek(sfd, 0, SEEK_CUR)) == (off_t) -1)
o = 0;
else
o = sfo;
-
- if ((r = sendfile(dfd, sfd, &o, l)) != l)
- return -1;
- if (sfo != (off_t) -1) {
- sfo += r;
+ while (l > 0) {
+ size_t m = l > MAX_SENDFILE_SIZE ? MAX_SENDFILE_SIZE : l;
+ ssize_t r;
+
+ if ((r = sendfile(dfd, sfd, &o, m)) <= 0)
+ return -1;
+
+ l -= r;
- lseek(sfd, sfo, SEEK_SET);
+ if (sfo != (off_t) -1)
+ sfo += r;
}
+ if (sfo != (off_t) -1)
+ lseek(sfd, sfo, SEEK_SET);
+
return 0;
}
@@ -185,7 +199,7 @@ off_t filesize(int fd) {
if (fstat(fd, &st) < 0) {
fprintf(stderr, "stat(): %s\n", strerror(errno));
- return -1;
+ return (off_t) -1;
}
return st.st_size;
@@ -206,7 +220,7 @@ int expand_file(int fd, off_t l) {
return 0;
}
-#define MMAPSIZE (100*1024*1024)
+#define MMAPSIZE (100*1024*1024) /* 100MB */
#define BUFSIZE (32*1024)
int copy_fd(int sfd, int dfd, off_t l) {
@@ -229,7 +243,7 @@ int copy_fd(int sfd, int dfd, off_t l) {
if (l > BUFSIZE) {
- m = l < MMAPSIZE ? l : MMAPSIZE;
+ m = (size_t) (l < MMAPSIZE ? l : MMAPSIZE);
if ((sfo = lseek(sfd, 0, SEEK_CUR)) != (off_t) -1) {
off_t s;
@@ -238,7 +252,7 @@ int copy_fd(int sfd, int dfd, off_t l) {
return -1;
if (s < sfo+l) {
- fprintf(stderr, "File too short (%u vs. %lu %i)\n", s, sfo+l, l);
+ fprintf(stderr, "File too short\n");
return -1;
}
@@ -268,8 +282,7 @@ int copy_fd(int sfd, int dfd, off_t l) {
while (l > 0) {
off_t n;
-
- m = l > BUFSIZE ? BUFSIZE : l;
+ size_t m = l > BUFSIZE ? BUFSIZE : l;
if ((n = loop_read(sfd, buf, m)) != m) {
@@ -417,7 +430,7 @@ int copy_fd(int sfd, int dfd, off_t l) {
int copy_file(const char *src, const char *dst, int c) {
int sfd = -1, dfd = -1, r = -1;
- size_t size;
+ off_t size;
if ((sfd = open(src, O_RDONLY)) < 0) {
fprintf(stderr, "open(\"%s\", O_RDONLY): %s\n", src, strerror(errno));
diff --git a/src/util.h b/src/util.h
index 8b34022..b7fb571 100644
--- a/src/util.h
+++ b/src/util.h
@@ -57,7 +57,7 @@ int rm_rf(const char *root, int rec);
ssize_t loop_read(int fd, void *d, size_t l);
ssize_t loop_write(int fd, void *d, size_t l);
-int expand_file(int fd, size_t l);
-int filesize(int fd);
+int expand_file(int fd, off_t l);
+off_t filesize(int fd);
#endif