Logo Search packages:      
Sourcecode: aget version File versions  Download package

Resume.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>

#include "Data.h"
#include "Resume.h"
#include "Misc.h"

extern struct thread_data *wthread;
extern struct request *req;
extern int nthreads;
extern int bwritten;


void save_log()
{
      char *logfile;
      struct hist_data h;
      FILE *fp;

      logfile = (char *)calloc(255, sizeof(char));


      if (strlen(req[0].lfile) == 0)
            snprintf(logfile, 255, "aget-%s.log", req[0].file);
      else
            snprintf(logfile, 255, "aget-%s.log", req[0].lfile);

      if ((fp = fopen(logfile, "w")) == NULL) {
            fprintf(stderr, "cannot open log file %s for writing: %s\n", logfile, strerror(errno));
            exit(1);
      }

      
      memcpy(&(h.req), req, sizeof(struct request));
      memcpy(&(h.wthread), wthread, sizeof(struct thread_data) * nthreads);
      h.nthreads = nthreads;
      h.bwritten = bwritten;
      
      printf("--> Logfile is: %s, so far %d bytes have been transferred\n", logfile, h.bwritten);

      fwrite(&h, sizeof(struct hist_data), 1, fp);
      fclose(fp);

      free(logfile);
}


int read_log(struct hist_data *h)
{
      char *logfile;
      FILE *fp;

      logfile = (char *)calloc(255, sizeof(char));


      if (strlen(req[0].lfile) == 0)
            snprintf(logfile, 255, "aget-%s.log", req[0].file);
      else
            snprintf(logfile, 255, "aget-%s.log", req[0].lfile);

      Log("Attempting to read log file %s for resuming download job...", logfile);

      if ((fp = fopen(logfile, "r")) == NULL) {
            if (errno == ENOENT) {
                  Log("Couldn't find log file for this download, starting a clean job...");
                  return -1;
            } else {
                  fprintf(stderr, "cannot open log file %s for reading: %s\n", logfile, strerror(errno));
                  exit(1);
            }
      }

      fread(h, sizeof(struct hist_data), 1, fp);
      bwritten = h->bwritten;
      fclose(fp);

      Log("%d bytes already transferred", bwritten);

      /* Unlinking logfile after we've read it  */
      if ((unlink(logfile)) == -1) 
            fprintf(stderr, "read_log: cannot remove stale log file %s: %s\n", logfile, strerror(errno));
            
      free(logfile);

      return 0;
}

Generated by  Doxygen 1.6.0   Back to index