Annotation of coherent/b/bin/cvmail.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <sys/stat.h>
                      3: #define TRACE          printf
                      4: #define MPATH          "/usr/spool/mail/"
                      5: #define TEMPFILE       "/tmp/mbox.new"
                      6: #define OLDSEP         "\001\001\n"
                      7: #define NEWSEP         "\001\001\001\001\n"
                      8: #define MAXLEN         512
                      9: #define TRUE           1
                     10: #define FALSE          0
                     11: 
                     12: main(argc, argv)
                     13: int argc;
                     14: char * argv[];
                     15: 
                     16: {
                     17: struct stat sbuf;
                     18: int status;
                     19: FILE *infile;
                     20: FILE *outfile;
                     21: char filename[66];
                     22: char fullname[66];
                     23: char msgline [MAXLEN];
                     24: int counter = 1;
                     25: typedef short int bool;
                     26: bool justsep;
                     27: char systemcmd [76];
                     28: 
                     29:        if(argc == 1){
                     30:                printf("mailbox to convert? ");
                     31:                scanf("%s", filename);
                     32:                strcpy(fullname, filename);
                     33:        }else{
                     34:                if (argc ==2){
                     35:                        strcpy(fullname, argv[1]);
                     36:                }
                     37: 
                     38:                if (argc == 3){
                     39:                        if(strlen(argv[1]) <= 2){
                     40:                                if( (argv[1][0] == 'm') || (argv[1][1] == 'm')){
                     41:                                        strcpy(fullname,MPATH);
                     42:                                        strcat(fullname,argv[2]);
                     43:                                }else{
                     44:                                        printf("invalid argument %s\n",
                     45:                                                argv[1]);
                     46:                                        exit(1);
                     47:                                }
                     48:                        }else{
                     49:                                printf("Usage: cvmail [-m] filename\n");
                     50:                                exit(1);
                     51:                        }
                     52:                }
                     53:        }
                     54: 
                     55:        TRACE("Converting file %s\n", fullname);
                     56:        /* get owner & group information */
                     57:        if( status = stat(fullname,&sbuf)){
                     58:                printf("Cannot stat file %s\n",fullname);
                     59:                exit(1);
                     60:        }
                     61: 
                     62:        if( (infile = fopen(fullname,"r")) == NULL){
                     63:                printf("Cannot open %s for reading!\n", fullname);
                     64:                exit(1);
                     65:        }
                     66: 
                     67:        if( (outfile=fopen(TEMPFILE,"w")) == NULL){
                     68:                printf("Cannot open %s for writing!\n");
                     69:                exit(1);
                     70:        }
                     71: 
                     72:        /* print newsep at top of file */
                     73:        fprintf(outfile,NEWSEP);
                     74: 
                     75:        /* now loop thorugh the file. Read each line and copy it
                     76:         * to the tempfile. If we encounter an oldsep, convert it
                     77:         * to a newsep, acutally 2 newseps, since we end a message
                     78:         * with a sep and begin a message with a sep. The 2nd sep
                     79:         * becomes the start sep for the next msg.
                     80:         */
                     81:        
                     82:        /* justsep is a boolean use to determine if we just wrote a
                     83:         * new msgsep. If we did, then we want to write another to begin
                     84:         * the next message. This will prevent 2 seps from appearing
                     85:         * at the end of the new file.
                     86:         */
                     87: 
                     88:        justsep = FALSE;
                     89:        while (fgets(msgline,MAXLEN,infile) != NULL){
                     90: 
                     91:                if(justsep == TRUE){
                     92:                        fprintf(outfile,NEWSEP);
                     93:                        justsep = FALSE;
                     94:                        counter++;
                     95:                }
                     96: 
                     97:                if(strcmp(OLDSEP,msgline) == 0){
                     98:                        strcpy(msgline,NEWSEP);
                     99:                        justsep = TRUE;
                    100:                }
                    101: 
                    102:                fputs(msgline, outfile);
                    103:        }
                    104: 
                    105:        /* we're done reading and writing, close the files */
                    106:        fclose(infile);
                    107:        fclose(outfile);
                    108: 
                    109:        /* delete old mailbox */
                    110:        if ( 0 != unlink(fullname)){
                    111:                printf("Could not delete old mailbox. The converted mailbox is at: %s\n",TEMPFILE);
                    112:                exit(1);
                    113:        }
                    114: 
                    115:        /* copy new mailbox to old */
                    116: 
                    117:        if( 0 != link(TEMPFILE, fullname)){
                    118:                sprintf(systemcmd,"/bin/cp %s %s",TEMPFILE, fullname);
                    119:                if ( system(systemcmd) == -1){
                    120:                                printf("Could not copy converted mailbox to destination. The ");
                    121:                                printf("new mailbox is at %s\n",TEMPFILE);
                    122:                                exit(1);
                    123:                }
                    124:        }
                    125: 
                    126:        /* delete temporary mailbox */
                    127:        if ( 0 != unlink(TEMPFILE)){
                    128:                printf("Could not temporary workfile. ");
                    129:                printf("Compare %s and %s before manually deleting\n",
                    130:                        TEMPFILE, fullname);
                    131:                printf("before deleting the temporary file %s.\n",TEMPFILE);
                    132:                exit(1);
                    133:        }
                    134: 
                    135:        /* change ownership of new file to that of the old file */
                    136: 
                    137:        chown(fullname,sbuf.st_uid, sbuf.st_gid);
                    138:        chmod(fullname,00644);
                    139: 
                    140:        printf("Converted %d messages\n", counter);
                    141: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.