[1411] in Moira
Don't lose leading whitespace with mrbackup
daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Thu Mar 9 15:46:12 2000
Message-Id: <200003092046.PAA01337@wing-commander.mit.edu>
To: moiradev@MIT.EDU
Date: Thu, 09 Mar 2000 15:46:06 EST
From: Garry Zacheiss <zacheiss@MIT.EDU>
Experimentally, this works for preventing duplicate strings;
strings with leading spaces go into the backups the right way. Code for
endtrim shamelessly stolen from strtrim.
Index: db2bkup.awk
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository//moira/backup/db2bkup.awk,v
retrieving revision 1.13
diff -c -r1.13 db2bkup.awk
*** db2bkup.awk 1998/02/13 21:32:26 1.13
--- db2bkup.awk 2000/03/09 19:13:40
***************
*** 87,93 ****
for (i = 0; i < count; i++) {
if (i != 0) print " dump_sep(f);";
if (vtype[i] ~ /str/ || vtype[i] ~ /date/) {
! printf " dump_str(f, strtrim(t_%s));\n", vname[i];
} else {
printf " dump_%s(f, t_%s);\n", vtype[i], vname[i];
}
--- 87,93 ----
for (i = 0; i < count; i++) {
if (i != 0) print " dump_sep(f);";
if (vtype[i] ~ /str/ || vtype[i] ~ /date/) {
! printf " dump_str(f, endtrim(t_%s));\n", vname[i];
} else {
printf " dump_%s(f, t_%s);\n", vtype[i], vname[i];
}
Index: dump_db.h
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository//moira/backup/dump_db.h,v
retrieving revision 1.5
diff -c -r1.5 dump_db.h
*** dump_db.h 1998/03/10 21:18:03 1.5
--- dump_db.h 2000/03/09 19:13:12
***************
*** 23,25 ****
--- 23,26 ----
void dbmserr(void);
void safe_close(FILE *stream);
FILE *open_file(char *prefix, char *suffix);
+ char *endtrim(char *save);
Index: dump_db.pc
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository//moira/backup/dump_db.pc,v
retrieving revision 1.8
diff -c -r1.8 dump_db.pc
*** dump_db.pc 1998/03/10 21:18:04 1.8
--- dump_db.pc 2000/03/09 20:33:14
***************
*** 115,117 ****
--- 115,141 ----
fprintf(stderr, "Working on %s\n", name);
return f;
}
+
+ /*
+ * Trim whitespace off the tail end of a string
+ */
+ char *endtrim(char *save)
+ {
+ char *t, *s;
+
+ s = save;
+ for (t = s; *t; t++)
+ continue;
+ while (t > s)
+ {
+ --t;
+ if (!isspace(*t))
+ {
+ t++;
+ break;
+ }
+ }
+ if (*t)
+ *t = '\0';
+ return s;
+ }