Module Name: othersrc
Committed By: agc
Date: Mon Nov 26 16:00:54 UTC 2012
Modified Files:
othersrc/external/bsd/mat/dist: frontends.c mat.c mat.h
Log Message:
+ unmap the mmap'ed memory in the all cases.
+ be consistent with the type of integer when printing
+ add an error count field to the main structure
+ check error count in the frontends
ride previous shlib major bump
with thanks to marc balmer for keeping me honest
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 othersrc/external/bsd/mat/dist/frontends.c \
othersrc/external/bsd/mat/dist/mat.h
cvs rdiff -u -r1.7 -r1.8 othersrc/external/bsd/mat/dist/mat.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: othersrc/external/bsd/mat/dist/frontends.c
diff -u othersrc/external/bsd/mat/dist/frontends.c:1.6 othersrc/external/bsd/mat/dist/frontends.c:1.7
--- othersrc/external/bsd/mat/dist/frontends.c:1.6 Mon Nov 26 05:49:05 2012
+++ othersrc/external/bsd/mat/dist/frontends.c Mon Nov 26 16:00:54 2012
@@ -287,7 +287,7 @@ mat_tar(int argc, char **argv)
if (dir != NULL && chdir(cwd) < 0) {
(void) fprintf(stderr, "can't chdir back to '%s'\n", cwd);
}
- return ok;
+ return ok && mat.errorc == 0;
}
#ifndef MAT_ARGC_MAX
@@ -439,7 +439,7 @@ mat_pax(int argc, char **argv)
if (dir != NULL && chdir(cwd) < 0) {
(void) fprintf(stderr, "can't chdir back to '%s'\n", cwd);
}
- return ok;
+ return ok && mat.errorc == 0;
}
/* varargs version of pax */
Index: othersrc/external/bsd/mat/dist/mat.h
diff -u othersrc/external/bsd/mat/dist/mat.h:1.6 othersrc/external/bsd/mat/dist/mat.h:1.7
--- othersrc/external/bsd/mat/dist/mat.h:1.6 Sun Nov 25 20:20:36 2012
+++ othersrc/external/bsd/mat/dist/mat.h Mon Nov 26 16:00:54 2012
@@ -108,6 +108,7 @@ typedef struct mat_t {
char from[MAT_PATH_MAX]; /* path to change from */
char to[MAT_PATH_MAX]; /* path to change to */
void *re; /* pointer to compiled regexp */
+ unsigned errorc; /* # of errors */
} mat_t;
int mat_init(mat_t */*mat*/, const char */*f*/, const char */*mode*/);
Index: othersrc/external/bsd/mat/dist/mat.c
diff -u othersrc/external/bsd/mat/dist/mat.c:1.7 othersrc/external/bsd/mat/dist/mat.c:1.8
--- othersrc/external/bsd/mat/dist/mat.c:1.7 Mon Nov 26 05:49:05 2012
+++ othersrc/external/bsd/mat/dist/mat.c Mon Nov 26 16:00:54 2012
@@ -185,23 +185,28 @@ static int
memwrite(FILE *fp, uint64_t off, const void *p, size_t size)
{
char *mapped;
+ int ok;
+ ok = 1;
mapped = mmap(NULL, size, PROT_WRITE, MAP_SHARED, fileno(fp), (off_t)off);
if (mapped == MAP_FAILED) {
if (write(fileno(fp), p, size) != (ssize_t)size) {
- fprintf(stderr, "short write %zu chars\n", size);
- return 0;
+ ok = 0;
}
} else {
- lseek(fileno(fp), (off_t)(off + size - 1), SEEK_SET);
- if (write(fileno(fp), "", 1) != 1) {
- fprintf(stderr, "short write %" PRIu64 " chars\n", size);
- return 0;
+ if (lseek(fileno(fp), (off_t)(off + size - 1), SEEK_SET) < 0) {
+ ok = 0;
+ } else if (write(fileno(fp), "", 1) != 1) {
+ ok = 0;
+ } else {
+ memcpy(mapped, p, size);
}
- memcpy(mapped, p, size);
munmap(mapped, size);
}
- return 1;
+ if (!ok) {
+ fprintf(stderr, "memwrite: short write %zu chars\n", size);
+ }
+ return ok;
}
/* write to mat archive */
@@ -212,6 +217,7 @@ archive_write(mat_t *mat, const void *p,
mat->off += size;
return 1;
}
+ mat->errorc += 1;
return 0;
}