From d55654f4e6221f7b5e74acb92e9b544eedfbb8b9 Mon Sep 17 00:00:00 2001 From: wesommer Date: Mon, 13 Jul 1987 03:52:34 +0000 Subject: [PATCH] Modified to pass lint, do better backups. --- backup/db2bkup.awk | 5 +- backup/dump_db.qc | 127 ++++++++++++++++++++++++++++----------------- 2 files changed, 83 insertions(+), 49 deletions(-) diff --git a/backup/db2bkup.awk b/backup/db2bkup.awk index 173a80e6..6890cb3a 100644 --- a/backup/db2bkup.awk +++ b/backup/db2bkup.awk @@ -9,8 +9,11 @@ BEGIN { print "/* This file automatically generated */"; print "/* Do not edit */"; print "#include "; + print "#include \"dump_db.h\""; print "/* This file automatically generated */" > "bkup1.qc"; print "/* Do not edit */" >> "bkup1.qc" + print "#include " >> "bkup1.qc" + print "FILE *open_file();" >> "bkup1.qc" print "do_backups(prefix)\n\tchar *prefix;\n{" >>"bkup1.qc" } @@ -55,7 +58,7 @@ $2 ~ /\=/ { printf ")\n" printf "## {\n" for (i = 0; i < count; i++) { - if (i != 0) print "\t\tdump_str(f, \":\");" + if (i != 0) print "\t\tdump_sep(f);" printf "\t\tdump_%s(f, t_%s);\n", vtype[i], vname[i] } printf "\t\tdump_nl(f);\n" diff --git a/backup/dump_db.qc b/backup/dump_db.qc index 820f9e5e..ab581ca6 100644 --- a/backup/dump_db.qc +++ b/backup/dump_db.qc @@ -9,9 +9,12 @@ * which can be later read back into SMS in the event of a crash. * * $Log$ - * Revision 1.1 1987-07-11 19:51:05 wesommer - * Initial revision + * Revision 1.2 1987-07-13 03:52:53 wesommer + * Modified to pass lint, do better backups. * +Revision 1.1 87/07/11 19:51:05 wesommer +Initial revision + * */ @@ -21,14 +24,24 @@ static char *rcsid_dump_db_c = "$Header$"; #include #include +#include + +/* putc without the line buffer hair */ + +#define putc1(x, p) (--(p)->_cnt >= 0 ?\ + (int)(*(unsigned char *)(p)->_ptr++ = (x)) :\ + _flsbuf((unsigned char)(x), p)) FILE *open_file(); +char act[128]; + main(argc, argv) int argc; char **argv; { char *prefix; + register int i; if (argc != 2) { fprintf(stderr, "Usage: smsbackup prefix\n"); @@ -36,6 +49,13 @@ main(argc, argv) } prefix = argv[1]; + bzero(act, 128); + + act[':']=1; + act['\\']=1; + act[127]=2; + for (i=0; i<' '; i++) act[i]=2; + ## ingres sms do_backups(prefix); @@ -44,64 +64,52 @@ main(argc, argv) exit(0); } -FILE *open_file(prefix, suffix) - char *prefix, *suffix; -{ - char name[BUFSIZ]; - int fd; - FILE *f; - - strcpy(name, prefix); - strcat(name, suffix); - - fd = open(name, O_CREAT|O_WRONLY|O_EXCL, 0644); - if (fd < 0) { - punt(name); - } - f = fdopen(fd, "w"); - if (f == NULL) { - fprintf(stderr, "fdopen of "); - punt(name); - } - fprintf(stderr, "Working on %s\n", name); - return(f); -} - dump_int(f, n) FILE *f; int n; { char buf[1024]; - sprintf(buf, "%d", n); + (void) sprintf(buf, "%d", n); dump_str(f, buf); } -dump_nl(f) +wpunt() { - dump_str(f, "\n"); + punt("can't write backup file"); } -/* - * Should check that we're not printing non-printing characters or - * ':' characters here (??? recovery if we do??) - */ - dump_str(f, str) - FILE *f; - char *str; -{ - register int len = strlen(str); - - if (fwrite(str, 1, len, f) != len) punt("short write"); -} - - -punt(msg) - char *msg; + register FILE *f; + register char *str; { - perror(msg); -## exit - exit(1); + register char *ibp = str; + register int c; /* PCC doesn't put chars in registers.. */ + for (; c = *ibp; ibp++) { + c = toascii(c); /* punt 8th bit */ + switch(act[c]) { + register int t; + case 1: + if (putc1('\\', f) < 0) wpunt(); + /* fall thru.. */ + case 0: + if (putc1(c, f) < 0) wpunt(); + + break; + case 2: + if (putc1('\\', f) < 0) wpunt(); + t = ((c>>6)&7) + '0'; + if (putc1(t,f) < 0) wpunt(); + t = ((c>>3)&7) + '0'; + if (putc1(t,f) < 0) wpunt(); + t = (c&7) + '0'; + if (putc1(t,f) < 0) wpunt(); + fprintf(stderr, "control character \\%03o\n", c); + break; + + default: + punt("Can't get here"); + } + } } safe_close(stream) @@ -111,9 +119,32 @@ safe_close(stream) punt("Unable to fflush"); if (fsync(fileno(stream)) != 0) punt("Unable to fsync"); - fclose(stream); + (void) fclose(stream); } +FILE *open_file(prefix, suffix) + char *prefix, *suffix; +{ + char name[BUFSIZ]; + int fd; + FILE *f; + + (void) strcpy(name, prefix); + (void) strcat(name, suffix); + + fd = open(name, O_CREAT|O_WRONLY|O_EXCL, 0644); + if (fd < 0) { + punt(name); + } + f = fdopen(fd, "w"); + if (f == NULL) { + fprintf(stderr, "fdopen of "); + punt(name); + } + fprintf(stderr, "Working on %s\n", name); + return(f); +} + /* * Local Variables: * mode: c -- 2.45.1