summaryrefslogtreecommitdiff
path: root/utils/cattbl.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/cattbl.c')
-rw-r--r--utils/cattbl.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/utils/cattbl.c b/utils/cattbl.c
index d7505ed..a9a8cf4 100644
--- a/utils/cattbl.c
+++ b/utils/cattbl.c
@@ -35,7 +35,7 @@ putuint32BE(uint32_t n, FILE *f)
int
main(int argc, char *argv[])
{
- bool efflag;
+ bool efflag, sameptrflag;
int i, runsum, numptrs;
long size;
uint32_t *ptrs, *runsums;
@@ -44,7 +44,7 @@ main(int argc, char *argv[])
char *ep;
if (argc < 3) {
- errx(1, "Usage: cattbl [-f] size file ...");
+ errx(1, "Usage: cattbl [-fx] size file ...");
}
if (strcmp(argv[1], "-f") == 0) {
@@ -55,6 +55,19 @@ main(int argc, char *argv[])
efflag = false;
}
+ if (strcmp(argv[1], "-x") == 0) {
+ sameptrflag = true;
+ argv += 1;
+ argc -= 1;
+ } else {
+ sameptrflag = false;
+ }
+
+ if (strcmp(argv[1], "-fx") == 0) {
+ sameptrflag = true;
+ efflag = true;
+ }
+
size = strtol(argv[1], &ep, 0);
if (argv[1][0] == '\0' || *ep != '\0') {
errx(1, "invalid size '%s'", argv[1]);
@@ -80,7 +93,8 @@ main(int argc, char *argv[])
runsum = 16 + 16 * (argc);
for (i = 0; i < argc; ++i) {
- if (i > 0 && strcmp(argv[i], argv[i - 1]) == 0) {
+ if (sameptrflag && i > 0 && strcmp(argv[i], argv[i - 1]) == 0)
+ {
runsums[i] = runsums[i - 1];
ptrs[i] = ptrs[i - 1];
continue;
@@ -111,7 +125,8 @@ main(int argc, char *argv[])
}
for (i = 0; i < argc; ++i) {
- if (i > 0 && strcmp(argv[i], argv[i - 1]) == 0) {
+ if (sameptrflag && i > 0 && strcmp(argv[i], argv[i - 1]) == 0)
+ {
continue;
}
size_t n;