void CheckExistanceOfDirectoriesAndFiles(void) { if(!DirectoryExists(getMediaDirectory())) { LogWarn(VB_SETTING, "FPP directory does not exist, creating it.\n"); if ( mkdir(getMediaDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create media directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getMusicDirectory())) { LogWarn(VB_SETTING, "Music directory does not exist, creating it.\n"); if ( mkdir(getMusicDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create music directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getSequenceDirectory())) { LogWarn(VB_SETTING, "Sequence directory does not exist, creating it.\n"); if ( mkdir(getSequenceDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create sequence directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getEventDirectory())) { LogWarn(VB_SETTING, "Event directory does not exist, creating it.\n"); if ( mkdir(getEventDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create event directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getVideoDirectory())) { LogWarn(VB_SETTING, "Video directory does not exist, creating it.\n"); if ( mkdir(getVideoDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create video directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getEffectDirectory())) { LogWarn(VB_SETTING, "Effect directory does not exist, creating it.\n"); if ( mkdir(getEffectDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create effect directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getScriptDirectory())) { LogWarn(VB_SETTING, "Script directory does not exist, creating it.\n"); if ( mkdir(getScriptDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create script directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getPlaylistDirectory())) { LogWarn(VB_SETTING, "Playlist directory does not exist, creating it.\n"); if ( mkdir(getPlaylistDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create playlist directory.\n"); exit(EXIT_FAILURE); } } if(!FileExists(getUniverseFile())) { LogWarn(VB_SETTING, "Universe file does not exist, creating it.\n"); char *cmd, *file = getUniverseFile(); cmd = (char *)malloc(strlen(file)+7); snprintf(cmd, strlen(file)+7, "touch %s", file); if ( system(cmd) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create universe file.\n"); exit(EXIT_FAILURE); } free(cmd); } if(!FileExists(getScheduleFile())) { LogWarn(VB_SETTING, "Schedule file does not exist, creating it.\n"); char *cmd, *file = getScheduleFile(); cmd = (char *)malloc(strlen(file)+7); snprintf(cmd, strlen(file)+7, "touch %s", file); if ( system(cmd) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create schedule file.\n"); exit(EXIT_FAILURE); } free(cmd); } if(!FileExists(getBytesFile())) { LogWarn(VB_SETTING, "Bytes file does not exist, creating it.\n"); char *cmd, *file = getBytesFile(); cmd = (char *)malloc(strlen(file)+7); snprintf(cmd, strlen(file)+7, "touch %s", file); if ( system(cmd) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create bytes file.\n"); exit(EXIT_FAILURE); } free(cmd); } if(!FileExists(getSettingsFile())) { LogWarn(VB_SETTING, "Settings file does not exist, creating it.\n"); char *cmd, *file = getSettingsFile(); cmd = (char *)malloc(strlen(file)+7); snprintf(cmd, strlen(file)+7, "touch %s", file); if ( system(cmd) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create settings file.\n"); exit(EXIT_FAILURE); } free(cmd); } }
/* * Fork and run an event script */ int RunEventScript(FPPevent *e) { pid_t pid = 0; char userScript[1024]; char eventScript[1024]; // Setup the script from our user strcpy(userScript, getScriptDirectory()); strcat(userScript, "/"); strncat(userScript, e->script, 1024 - strlen(userScript)); userScript[1023] = '\0'; // Setup the wrapper memcpy(eventScript, getFPPDirectory(), sizeof(eventScript)); strncat(eventScript, "/scripts/eventScript", sizeof(eventScript)-strlen(eventScript)-1); pid = fork(); if (pid == 0) // Event Script process { #ifndef NOROOT struct sched_param param; param.sched_priority = 0; if (sched_setscheduler(0, SCHED_OTHER, ¶m) != 0) { perror("sched_setscheduler"); exit(EXIT_FAILURE); } #endif ShutdownControlSocket(); char *args[128]; char *token = strtok(userScript, " "); int i = 1; args[0] = strdup(userScript); while (token && i < 126) { args[i] = strdup(token); i++; token = strtok(NULL, " "); } args[i] = NULL; if (chdir(getScriptDirectory())) { LogErr(VB_EVENT, "Unable to change directory to %s: %s\n", getScriptDirectory(), strerror(errno)); exit(EXIT_FAILURE); } execvp(eventScript, args); LogErr(VB_EVENT, "RunEventScript(), ERROR, we shouldn't be here, " "this means that execvp() failed trying to run '%s %s': %s\n", eventScript, args[0], strerror(errno)); exit(EXIT_FAILURE); } return 1; }