rotate_state.c (2406B)
1 #include "defs.h" 2 #include "util.h" 3 4 #include <errno.h> 5 #include <string.h> 6 #include <unistd.h> 7 8 state_t get_rotated_state(void) { 9 bool depends = !access("depends", R_OK), 10 setup = !access("setup", X_OK), 11 start = !access("start", X_OK), 12 run = !access("run", X_OK), 13 pid = !access("pid", X_OK), 14 stop = !access("stop", X_OK), 15 finish = !access("finish", X_OK); 16 17 switch (service.state) { 18 case STATE_INACTIVE: 19 return depends ? STATE_DEPENDENCY 20 : setup ? STATE_SETUP 21 : start ? STATE_STARTING 22 : run ? STATE_ACTIVE_FOREGROUND 23 : STATE_ACTIVE_DUMMY; 24 case STATE_DEPENDENCY: 25 return setup ? STATE_SETUP 26 : start ? STATE_STARTING 27 : run ? STATE_ACTIVE_FOREGROUND 28 : STATE_ACTIVE_DUMMY; 29 case STATE_SETUP: 30 return start ? STATE_STARTING 31 : run ? STATE_ACTIVE_FOREGROUND 32 : STATE_ACTIVE_DUMMY; 33 case STATE_STARTING: 34 return pid ? STATE_ACTIVE_PID 35 : STATE_ACTIVE_BACKGROUND; 36 case STATE_ACTIVE_FOREGROUND: 37 return finish ? STATE_FINISHING 38 : STATE_INACTIVE; 39 case STATE_ACTIVE_BACKGROUND: 40 case STATE_ACTIVE_PID: 41 return stop ? STATE_STOPPING 42 : finish ? STATE_FINISHING 43 : !need_restart() ? STATE_INACTIVE 44 : setup ? STATE_SETUP 45 : start ? STATE_STARTING 46 : run ? STATE_ACTIVE_FOREGROUND 47 : STATE_ACTIVE_DUMMY; 48 case STATE_ACTIVE_DUMMY: 49 return finish ? STATE_FINISHING 50 : !need_restart() ? STATE_INACTIVE 51 : setup ? STATE_SETUP 52 : start ? STATE_STARTING 53 : run ? STATE_ACTIVE_FOREGROUND 54 : STATE_ACTIVE_DUMMY; 55 case STATE_STOPPING: 56 return finish ? STATE_FINISHING 57 : !need_restart() ? STATE_INACTIVE 58 : setup ? STATE_SETUP 59 : start ? STATE_STARTING 60 : run ? STATE_ACTIVE_FOREGROUND 61 : STATE_ACTIVE_DUMMY; 62 case STATE_FINISHING: 63 return !need_restart() ? STATE_INACTIVE 64 : setup ? STATE_SETUP 65 : start ? STATE_STARTING 66 : run ? STATE_ACTIVE_FOREGROUND 67 : STATE_ACTIVE_DUMMY; 68 } 69 return -1; 70 } 71 72 int rotate_state(bool now) { 73 }