home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / OSKBox.lzh / MAILBOX / CC / renumber.c < prev    next >
C/C++ Source or Header  |  1990-08-01  |  2KB  |  85 lines

  1. #include <stdio.h>
  2. #include <errno.h>
  3. #include "mailbox.h"
  4.  
  5. struct {
  6.     int was, is;
  7.     } map[MAXMAIL];
  8.  
  9. rename_file (name, newname)
  10. char *name, *newname;
  11. {
  12.     char *argv[4];
  13.     int stat;
  14.     extern char **environ;
  15.     extern int os9fork();
  16.  
  17.     argv[0] = "rename";
  18.     argv[1] = name;
  19.     argv[2] = newname;
  20.     argv[3] = 0;
  21.     os9exec (os9fork, argv[0], argv, environ, 0, 0, 3);
  22.     wait (&stat);
  23.     return ((stat == 0) ? 0 : -1);
  24.     }
  25.  
  26. main (argc, argv)
  27. char *argv[];
  28. {
  29.     int i = 1;
  30.     struct msg_header head;
  31.     struct userstruct user;
  32.     int mailcount = 0;
  33.     int f1, f2;
  34.     char str1[40], str2[40];
  35.  
  36.     chdir (HOME);
  37.     if ((f1 = open ("mail_dir", 1)) < 0)
  38.         exit (errno, printf ("Error opening mail_dir\n"));
  39.     f2 = creat ("mail_dir.tmp", 3);
  40.     while (read (f1, &head, sizeof (head))) {
  41.         if (head.mhstat == ' ') {
  42.             write (f2, &head, sizeof (head));
  43.             continue;
  44.             }
  45.         if (head.mhnr == i) {
  46.             i++;
  47.             write (f2, &head, sizeof (head));
  48.             continue;
  49.             }
  50.         printf ("%d -> %d\n", head.mhnr, i);
  51.         sprintf (str1, "MAIL/%06d", head.mhnr);
  52.         sprintf (str2, "%06d", i);
  53.         rename_file (str1, str2);
  54.         map[mailcount].was = head.mhnr;
  55.         map[mailcount].is = i;
  56.         mailcount++;
  57.         head.mhnr = i++;
  58.         write (f2, &head, sizeof (head));
  59.         }
  60.     close (f1);
  61.     close (f2);
  62.     unlink ("mail_dir");
  63.     rename_file ("mail_dir.tmp", "mail_dir");
  64.     
  65.     if ((f1 = open ("users", 1)) < 0)
  66.         exit (errno, printf ("Error opening users\n"));
  67.     f2 = creat ("users.tmp", 3);
  68.     while (read (f1, &user, sizeof (user))) {
  69.         for (i = 0; i < mailcount; i++)
  70.             if (user.usnmr == map[i].was) {
  71.                   user.usnmr = map[i].is;
  72.                 break;
  73.                 }
  74.             else if (user.usnmr < map[i].was) {
  75.                 user.usnmr = map[i-1].is;
  76.                 break;
  77.                 }
  78.         write (f2, &user, sizeof (user));
  79.         }
  80.     close (f1);
  81.     close (f2);
  82.     unlink ("users");
  83.     rename_file ("users.tmp", "users");
  84.     }
  85.