home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume17 / e2 / part01 / reconstruct.c < prev    next >
C/C++ Source or Header  |  1989-02-08  |  2KB  |  81 lines

  1. #include "e.h"
  2.  
  3.  
  4. /* 
  5.  * reconstruct()
  6.  *
  7.  * Finish off the building of the new history file. Emit the directory name
  8.  * then the history, except for hist[except] which is the new most recently 
  9.  * used entry and so we do it last.
  10.  *
  11.  * After this, emit the saved line if there was one and then the rest of
  12.  * the original history.
  13.  *
  14.  * Then close the two files and rename the old history to be the new one.
  15.  * Make sure they new .e file has the same perms as the old.
  16.  *
  17.  */
  18. void
  19. reconstruct(except)
  20. int except;
  21. {
  22.  
  23.     register int i;
  24.     register int c;
  25.  
  26.     /* The name of the directory goes first. */
  27.     ok_fprintf(tmp_fp, "%s\n", cwd);
  28.  
  29.     /* Put in the lines we still want. i.e. those excluding 'except'. */
  30.     for (i = 0; i < hist_count; i++){
  31.         if (i != except){
  32.             ok_fprintf(tmp_fp, "\t%s\n", hist[i]);
  33.         }
  34.     }
  35.  
  36.     /* Put in the new entry. */
  37.     ok_fprintf(tmp_fp, "\t%s\n", arg);
  38.  
  39.     /* The saved line, if there was one. */
  40.     if (saved_line){
  41.         ok_fprintf(tmp_fp, "%s\n", saved_line);
  42.     }
  43.  
  44.     /* The rest of the old history file. */
  45.     while ((c = getc(hist_fp)) != EOF){
  46.         if (putc(c, tmp_fp) == EOF){
  47.             perror("putc");
  48.             exit(EX_IOERR);
  49.         }
  50.     }
  51.  
  52.     /* Clean up etc. */
  53.     if (fclose(hist_fp) == EOF){
  54.         e_error("Could not close '%s'.", ehist);
  55.     }
  56.     if (fclose(tmp_fp) == EOF){
  57.         e_error("Could not close '%s'.", tmp_file);
  58.     }
  59. #ifdef Sysv
  60.     if (unlink(ehist) == -1){
  61.         e_error("Could not unlink '%s'\nNew history in '%s'.", ehist, tmp_file);
  62.     }
  63.  
  64.     if (link(tmp_file, ehist) == -1){
  65.         e_error("Could not link '%s' to '%s'.\n", tmp_file, ehist);
  66.     }
  67.  
  68.     if (unlink(tmp_file) == -1){
  69.         e_error("Could not unlink '%s'.\n", tmp_file);
  70.     }
  71. #else
  72.     if (rename(tmp_file, ehist) == -1){
  73.         e_error("Could not rename '%s' to '%s'.", tmp_file, ehist);
  74.     }
  75. #endif
  76.     if (chmod(ehist, emode) == -1){
  77.         e_error("Could not chmod '%s'", ehist);
  78.     }
  79.     return;
  80. }
  81.