/* * File Name: log.c * Author: Jade Cheng * Date: March 29, 2009 * Course: ICS 451 * Assignment: Project 2 */ #include "common.h" #include "log.h" static void print_header(void); /** The path to the log file. */ static char g_path[1000]; /** The pointer to the log file or standard output. */ static FILE * g_file; /* ------------------------------------------------------------------------ */ extern void log_close(FILE * f) { /* Close the log file. */ assert(g_file != NULL); fclose(g_file); g_file = NULL; } /* ------------------------------------------------------------------------ */ extern void log_init(void) { char src[1000]; FILE * f; size_t len; /* The log file path is stored in ~/.p2p/logfile. Try to open this * file. Replace the ~ with the path to the home directory. */ sprintf(src, "%s/.p2p/logfile", getenv("HOME")); f = fopen(src, "r"); if (f == NULL) { printf("Log setting not found in '%s'.\n", src); return; } /* The path is the first line of text in this file. */ fgets(g_path, sizeof(g_path), f); fclose(f); /* Get rid of the \n at the end of the file. */ len = strlen(g_path); if (len > 0 && g_path[len - 1] == '\n') g_path[len - 1] = '\0'; /* Check if the log file is available. */ f = fopen(g_path, "a"); if (f == NULL) { printf("Log file '%s' not available.\n", g_path); return; } printf("Logging to '%s'...\n", g_path); fclose(f); } /* ------------------------------------------------------------------------ */ extern FILE * log_open(void) { assert(g_file == NULL); /* Do not log anything if no log file is specified. */ if (g_path[0] == '\0') return NULL; /* Do not log anything if the log file is not available. */ g_file = fopen(g_path, "a"); if (g_file == NULL) return NULL; /* Print a standard header and return the file pointer. */ print_header(); return g_file; } /* ------------------------------------------------------------------------ */ /** * Prints a header to the log file. */ static void print_header(void) { time_t t; fprintf(g_file, "\n"); /* Print the process id and the time each time the log is opened. */ if (time(&t) != -1) fprintf( g_file, "p2p (pid = %d) at %s", (int)getpid(), asctime(localtime(&t))); fprintf(g_file, "----------------------------------------" "---------------------------------------\n"); }