home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / UPDATE.C < prev    next >
C/C++ Source or Header  |  1997-07-05  |  2KB  |  77 lines

  1. /* +++Date last modified: 05-Jul-1997 */
  2.  
  3. /*
  4. ** update_file() - 1) Renames szFname.bak (if existed) to tmpnam
  5. **                 2) Renames szFname to szFname.bak
  6. **                 3) Renames szOther to szFname.
  7. **                    If szOther == NULL, skip this step (REN2BAK only).
  8. **                 4) Removes old bak (tmpnam) file.
  9. **
  10. ** public domain by Phi Nguyen
  11. */
  12.  
  13. #include "update.h"
  14.  
  15. Boolean_T update_file(char *szFname, char *szOther)
  16. {
  17.       char  szBakname[FILENAME_MAX],
  18.             szTbakname[L_tmpnam],
  19.             *p;
  20.  
  21.       if (NULL == szFname)
  22.             return Error_;
  23.  
  24.       strcpy(szBakname, szFname);
  25.       p = strrchr(szBakname, '.');
  26.       if (p && !strpbrk(p, "\\/"))
  27.             *p = NUL;
  28.       strcat(szBakname, ".bak");
  29.  
  30.       rename(szBakname, tmpnam(szTbakname));
  31.       if (rename(szFname, szBakname))
  32.       {
  33.             rename(szTbakname, szBakname);
  34.             return Error_;
  35.       }
  36.  
  37.       if (NULL != szOther)
  38.       {
  39.             if (rename(szOther, szFname))
  40.             {
  41.                   rename(szBakname, szFname);
  42.                   rename(szTbakname, szBakname);
  43.                   return Error_;
  44.             }
  45.       }
  46.  
  47.       remove(szTbakname);
  48.       return Success_;
  49. }
  50.  
  51. #ifdef TEST
  52.  
  53. #include <stdlib.h>
  54.  
  55. main(int argc, char *argv[])
  56. {
  57.       int i;
  58.  
  59.       if (1 == argc)
  60.       {
  61.             puts("Usage: Ren2Bak filename ...");
  62.             return EXIT_FAILURE;
  63.       }
  64.  
  65.       for (i = 1; i < argc; i++)
  66.       {
  67.             if (Error_ == ren2bak(argv[i]))
  68.             {
  69.                   printf("Can't rename file '%s'.\n", argv[i]);
  70.                   return EXIT_FAILURE;
  71.             }
  72.       }
  73.       return EXIT_SUCCESS;
  74. }
  75.  
  76. #endif /* TEST */
  77.