-#ifndef DISABLE_LOGGER
-
- struct stat statbuf;
- int firstattempt;
- int retval;
- gid_t gid;
- uid_t uid;
- int access;
- char lastchar[2];
-
- log_file_data_pair *logs;
-
- log_init();
-
- logs = log_file_arr[logtype];
-
- LOG(log_info, logtype_logger, "doing log_setup, type %d, level %d, filename \"%s\"", logtype, loglevel, filename);
-
- /* LOG(log_extradebug+10, logtype_logger, "checking array for logtype is malloc'd"); */
- /* has the given logtype already been assigned memory? */
- if (logs==NULL)
- {
- logs = (log_file_data_pair *)malloc(sizeof(log_file_data_pair));
- if (logs==NULL)
- {
- LOG(log_severe, logtype_logger, "can't calloc in log_setup");
- }
- else
- {
- /*
- memcpy(logs, log_file_arr[logtype_default], sizeof(log_file_data_pair));
- */
- log_file_arr[logtype] = logs;
- (*logs)[1].log_file = NULL;
- }
- }
-
- /* I think this checks if we're logging to stdout or not. Probably unused */
- if ( ((*logs)[1].log_file == stdout) && ((*logs)[1].log_file != NULL) )
- {
- fclose((*logs)[1].log_file);
- (*logs)[1].log_file = NULL;
- }
-
- /* check if we need to append the given filename to a directory */
- if (strlen(global_log_data.log_file_directory)>0)
- {
- lastchar[0] = global_log_data.
- log_file_directory[strlen(global_log_data.log_file_directory)-1];
-
- if (lastchar[0] == '/' || lastchar[0] == '\\' || lastchar[0] == ':')
- lastchar[0] = 0;
- else
- /* this should probably be a platform specific path separator */
- lastchar[0] = '/';
-
- lastchar[1] = 0;
- }
- else
- lastchar[0] = 0;
-
-#ifdef DEBUG_OUTPUT_TO_SCREEN
- printf("filename is %s stored at location %p\n", (*logs)[1].log_filename,
- (*logs)[1].log_filename);
-#endif /* DEBUG_OUTPUT_TO_SCREEN */
- if (filename == NULL)
- {
- strncpy((*logs)[1].log_filename,
- (*(log_file_arr[0]))[1].log_filename, PATH_MAX);
- }
- else
- {
- sprintf((*logs)[1].log_filename, "%s%s%s",
- global_log_data.log_file_directory,
- lastchar, filename);
- }
- (*logs)[1].log_level = loglevel;
- (*logs)[1].display_options = display_options;
-
-#ifdef DEBUG_OUTPUT_TO_SCREEN
- printf("filename is %s stored at location %p\n", (*logs)[1].log_filename,
- (*logs)[1].log_filename);
-#endif /* DEBUG_OUTPUT_TO_SCREEN */
-
-#ifdef CHECK_STAT_ON_NEW_FILES
- uid = geteuid();
- gid = getegid();
-
-#ifdef DEBUG_OUTPUT_TO_SCREEN
- printf("about to stat file %s\n", (*logs)[1].log_filename);
-#endif
- firstattempt = stat((*logs)[1].log_filename, &statbuf);
-
- if (firstattempt == -1)
- {
-#ifdef DEBUG_OUTPUT_TO_SCREEN
- printf("about to call Log with %d, %d, %s, %s\n",
- log_note, logtype_logger,
- "can't stat Logfile",
- (*logs)[1].log_filename
- );
-#endif