]> andersk Git - moira.git/blobdiff - backup/dump_db.dc
add prefix to subnet table & queries
[moira.git] / backup / dump_db.dc
index d6969a147a10976bfc7028f11a1a2dd5f9fc0283..f915e8a0b2ebdb6d76cf5e30acead1493ff7ea5f 100644 (file)
@@ -31,7 +31,7 @@ EXEC SQL INCLUDE sqlca;
 
 FILE *open_file();
 
-char act[128];
+char act[257];
 
 main(argc, argv)
     int argc;
@@ -41,17 +41,18 @@ main(argc, argv)
     register int i;
     
     if (argc != 2) {
-       fprintf(stderr, "Usage: smsbackup prefix\n");
+       fprintf(stderr, "Usage: %s prefix\n", argv[0]);
        exit(1);
     }
     prefix = argv[1];
 
-    bzero(act, 128);
+    bzero(act, 256);
 
+    for (i=0; i<' '; i++) act[i]=2;
+    for (i=128; i<256; i++) act[i]=2;
     act[SEP_CHAR]=1;
     act['\\']=1;
     act[127]=2;
-    for (i=0; i<' '; i++) act[i]=2;
     
     EXEC SQL CONNECT moira;
     EXEC SQL set lockmode session where level = table;
@@ -83,10 +84,43 @@ dump_str(f, str)
     char  *strtrim();
     register char *ibp = strtrim(str);
     register int c;            /* PCC doesn't put chars in registers.. */
-    for (; c = *ibp; ibp++) {
-       c = toascii(c);         /* punt 8th bit */
+    register int t;
+
+    for (; c = (unsigned char) *ibp; ibp++) {
+       switch(act[c]) {
+       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();
+           break;
+           
+       default:
+           punt("Can't get here");
+       }
+    }
+}
+
+dump_bin(f, str)
+    register FILE *f;
+    register char *str;
+{
+    register char *ibp = str;
+    register int c;            /* PCC doesn't put chars in registers.. */
+    register int t;
+
+    for (; c = (unsigned char) *ibp; ibp++) {
        switch(act[c]) {
-           register int t;
        case 1:
            if (putc1('\\', f) < 0) wpunt();
            /* fall thru.. */
@@ -102,7 +136,6 @@ dump_str(f, str)
            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:
This page took 0.048817 seconds and 4 git commands to generate.