void _LogWrite(char *file, int line, const char *format, ...) { va_list arg; time_t t = time(NULL); struct tm tm = *localtime(&t); char timeStr[32]; sprintf(timeStr,"%4d-%.2d-%.2d %.2d:%.2d:%.2d", 1900+tm.tm_year, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); if ( getVerbose() ) { fprintf(stdout, "%s %s:%d:", timeStr, file, line); va_start(arg, format); vfprintf(stdout, format, arg); va_end(arg); } if ( getDaemonize() ) { FILE *logFile; logFile = fopen((const char *)getLogFile(), "a"); if ( ! logFile ) { fprintf(stderr, "Error: Unable to open log file for writing!\n"); fprintf(stderr, "%s %s:%d:",timeStr, file, line); va_start(arg, format); vfprintf(stderr, format, arg); va_end(arg); return; } fprintf(logFile, "%s %s:%d:",timeStr, file, line); va_start(arg, format); vfprintf(logFile, format, arg); va_end(arg); fclose(logFile); } }
int loadSettings(const char *filename) { if (!FileExists(filename)) { LogWarn(VB_SETTING, "Attempted to load settings file %s which does not exist!", filename); return -1; } FILE *file = fopen(filename, "r"); if (file != NULL) { char * line = NULL; size_t len = 0; ssize_t read; int sIndex = 0; while ((read = getline(&line, &len, file)) != -1) { if (( ! line ) || ( ! read ) || ( read == 1 )) continue; char *key = NULL, *value = NULL; // These are values we're looking for and will // run through trimwhitespace which means they // must be freed before we are done. char *token = strtok(line, "="); if ( ! token ) continue; key = trimwhitespace(token); if ( !strlen(key) ) { free(key); continue; } token = strtok(NULL, "="); if ( !token ) { fprintf(stderr, "Error tokenizing value for %s setting\n", key); free(key); continue; } value = trimwhitespace(token); parseSetting(key, value); settings.keyVal[key] = strdup(value); if ( key ) { free(key); key = NULL; } if ( value ) { free(value); value = NULL; } } if (line) free(line); fclose(file); } else { LogWarn(VB_SETTING, "Warning: couldn't open settings file: '%s'!\n", filename); return -1; } if (getDaemonize()) SetLogFile(getLogFile()); else SetLogFile(""); return 0; }
int main(int argc, char *argv[]) { initSettings(argc, argv); initMediaDetails(); if (DirectoryExists("/home/fpp")) loadSettings("/home/fpp/media/settings"); else loadSettings("/home/pi/media/settings"); wiringPiSetupGpio(); // would prefer wiringPiSetupSys(); // Parse our arguments first, override any defaults parseArguments(argc, argv); if (loggingToFile()) logVersionInfo(); printVersionInfo(); // Start functioning if (getDaemonize()) CreateDaemon(); scheduler = new Scheduler(); playlist = new Playlist(); sequence = new Sequence(); channelTester = new ChannelTester(); #ifndef NOROOT struct sched_param param; param.sched_priority = 99; if (sched_setscheduler(0, SCHED_FIFO, ¶m) != 0) { perror("sched_setscheduler"); exit(EXIT_FAILURE); } #endif MainLoop(); if (getFPPmode() != BRIDGE_MODE) { CleanupMediaOutput(); } if (getFPPmode() & PLAYER_MODE) { if (getFPPmode() == MASTER_MODE) ShutdownSync(); CloseChannelDataMemoryMap(); CloseEffects(); } CloseChannelOutputs(); delete channelTester; delete scheduler; delete playlist; delete sequence; return 0; }