00001
00002
00003
00004
00005
00006 #include "rsLog.h"
00007 #include "rsGlobalExtern.h"
00008
00009 static time_t LogfileLastChkTime = 0;
00010
00011 void
00012 getLogfileName (char **logFile, char *logDir, char *logFileName)
00013 {
00014 #ifndef _WIN32
00015 time_t myTime;
00016 struct tm *mytm;
00017 char *logfilePattern;
00018 char *logfileIntStr;
00019 int logfileInt;
00020 int tm_mday = 1;
00021 char logfileSuffix[MAX_NAME_LEN];
00022 char myLogDir[MAX_NAME_LEN];
00023
00024
00025
00026 if (logDir == NULL) {
00027 snprintf (myLogDir, MAX_NAME_LEN, "%-s", getLogDir());
00028 } else {
00029 snprintf (myLogDir, MAX_NAME_LEN, "%-s", logDir);
00030 }
00031 *logFile = (char *) malloc(strlen (myLogDir) + strlen (logFileName) + 24);
00032
00033 LogfileLastChkTime = myTime = time (0);
00034 mytm = localtime (&myTime);
00035 if ((logfileIntStr = getenv (LOGFILE_INT)) == NULL) {
00036 logfileInt = DEF_LOGFILE_INT;
00037 } else {
00038 logfileInt = atoi (logfileIntStr);
00039 }
00040
00041 tm_mday = (mytm->tm_mday / logfileInt) * logfileInt + 1;
00042 if (tm_mday > mytm->tm_mday)
00043 tm_mday -= logfileInt;
00044
00045
00046 if ((logfilePattern = getenv(LOGFILE_PATTERN)) == NULL) {
00047 logfilePattern = DEF_LOGFILE_PATTERN;
00048 }
00049 mytm->tm_mday = tm_mday;
00050 strftime (logfileSuffix, MAX_NAME_LEN, logfilePattern, mytm);
00051 sprintf (*logFile, "%-s/%-s.%-s", myLogDir, logFileName, logfileSuffix);
00052
00053
00054
00055 #else
00056 char tmpstr[1024];
00057 iRODSNtGetLogFilenameWithPath(tmpstr);
00058 *logFile = _strdup(tmpstr);
00059 #endif
00060 }
00061
00062 #ifndef _WIN32
00063 int
00064 chkLogfileName (char *logDir, char *logFileName)
00065 {
00066 time_t myTime;
00067 char *logFile = NULL;
00068 int i;
00069
00070 myTime = time (0);
00071 if (myTime < LogfileLastChkTime + LOGFILE_CHK_INT) {
00072
00073 return (0);
00074 }
00075
00076 getLogfileName (&logFile, logDir, logFileName);
00077
00078 if (CurLogfileName != NULL && strcmp (CurLogfileName, logFile) == 0) {
00079 free (logFile);
00080 return (0);
00081 }
00082
00083
00084
00085 if ((i = open(logFile, O_CREAT|O_RDWR, 0644)) < 0) {
00086 fprintf(stderr, "Unable to open logFile %s\n", logFile);
00087 free (logFile);
00088 return (-1);
00089 } else {
00090 lseek (i, 0, SEEK_END);
00091 }
00092
00093 if (CurLogfileName != NULL) {
00094 free (CurLogfileName);
00095 }
00096
00097 CurLogfileName = logFile;
00098
00099 close (0);
00100 close (1);
00101 close (2);
00102 (void) dup2(i, 0);
00103 (void) dup2(i, 1);
00104 (void) dup2(i, 2);
00105 (void) close(i);
00106
00107 return (0);
00108 }
00109
00110 #endif
00111