void test_config(void) { CfgFile* cfg = NULL; const char* file = NULL; const char* cfgname = NULL; file = "test.cfg"; cfgname = "Test1"; g_print("\n\rLoading '%s' configuration...\n\r", cfgname); cfg = cfg_load(file, cfgname); test_config_print_cfg(cfg); cfgname = "Test2"; g_print("Loading '%s' configuration...\n\r", cfgname); cfg = cfg_load(file, cfgname); test_config_print_cfg(cfg); cfgname = "Test3"; g_print("Creating a test configuration...\n\r"); cfg = cfg_new(file, cfgname); cfg_add_item(cfg, "KeyT3_1", "Value1"); cfg_add_item(cfg, "KeyT3_2", "Value2"); cfg_add_item(cfg, "KeyT3_3", "Value3"); g_print("Add the '%s' configuration\n\r", cfgname); cfg_store(cfg); g_print("The configuration size is %u...\n\r", cfg_get_size(cfg)); g_print("Free up configuration resources...\n\r"); cfg_free(cfg); }
int sage_init (void) { const char *str; if (hardware >= 0) { return (hardware >= GR_SSTTYPE_Voodoo4) ? 32 : 16; } grGlideInit(); if (getInteger(GR_NUM_BOARDS) <= 0) { grGlideShutdown(); return 0; } if (cfg_load("sage.ini") != 0) { cfg_load("/etc/sage.ini"); } grSstSelect(0); hardware = getHardware(); strcpy(renderer_name, "SAGE "); str = grGetString(GR_RENDERER); strcat(renderer_name, str); strcat(renderer_name, " "); str = grGetString(GR_VERSION); strcat(renderer_name, str); str = grGetString(GR_EXTENSION); hwext_texuma = (strstr(str, "TEXUMA") != NULL); hwext_texmirror = (strstr(str, "TEXMIRROR") != NULL); hwext_fogcoord = (strstr(str, "FOGCOORD") != NULL); hwext_texfmt = (strstr(str, "TEXFMT") != NULL); hwext_pixext = (strstr(str, "PIXEXT") != NULL); hwext_combine = (strstr(str, "COMBINE") != NULL); *(GrProc *)&gfGetRegistryOrEnvironmentStringExt = grGetProcAddress("grGetRegistryOrEnvironmentStringExt"); *(GrProc *)&gfSstWinOpenExt = grGetProcAddress("grSstWinOpenExt"); *(GrProc *)&gfBufferClearExt = grGetProcAddress("grBufferClearExt"); *(GrProc *)&gfColorMaskExt = grGetProcAddress("grColorMaskExt"); *(GrProc *)&gfStencilFuncExt = grGetProcAddress("grStencilFuncExt"); *(GrProc *)&gfStencilMaskExt = grGetProcAddress("grStencilMaskExt"); *(GrProc *)&gfStencilOpExt = grGetProcAddress("grStencilOpExt"); *(GrProc *)&gfColorCombineExt = grGetProcAddress("grColorCombineExt"); *(GrProc *)&gfAlphaCombineExt = grGetProcAddress("grAlphaCombineExt"); *(GrProc *)&gfTexColorCombineExt = grGetProcAddress("grTexColorCombineExt"); *(GrProc *)&gfTexAlphaCombineExt = grGetProcAddress("grTexAlphaCombineExt"); *(GrProc *)&gfConstantColorValueExt = grGetProcAddress("grConstantColorValueExt"); current = NULL; opengl_ver = cfg_get("3dfx.opengl.version", NULL); return (hardware >= GR_SSTTYPE_Voodoo4) ? 32 : 16; }
void Setup() { debug_level = 2; //set clock to max for init 32MHz ClockSetSource(x32MHz); //disable 2MHZ osc OSC.CTRL = 0b00000010; //save power turnoff_subsystems(); EnableInterrupts(); //init basic peripherals led_init(); uart_init_buffers(); uart_init(); time_init(); buzzer_init(); battery_init(); buttons_init(); //basic power control mems_power_init(); io_init(); SD_EN_INIT; //load configuration cfg_load(); _delay_ms(100); }
int sage_init (void) { if (hardware >= 0) { return 32; } if (cfg_load("sage.ini") != 0) { cfg_load("/etc/sage.ini"); } hardware = 0; current = NULL; return 32; }
void init_global_addl_config_hook(void) { LOGB("booting\n"); cfg_load(); //#ifdef CONFIG_MENU md380_create_main_meny_entry(); //#endif }
int cfg_func_include(unsigned char *filename, unsigned int curline, unsigned char **tokenv, unsigned int tokenc) { if (tokenc != 2) { CFG_ERR_HDR(); fprintf(stderr, "Invalid number of arguments (expected %s <filename>)\n", tokenv[0]); return -1; } return cfg_load(tokenv[1], 1); }
int main(int argc, char *argv[]) { int opt; int daemonize = FALSE; int verbose_level = 2; char *configfile = DEFAULT_CONFIG_FILE; while((opt = getopt(argc, argv, "c:bd:")) != -1) { switch(opt) { case 'c': configfile = optarg; break; case 'b': daemonize = TRUE; break; case 'd': verbose_level = atoi(optarg); break; default: usage(argv[0]); exit(EXIT_FAILURE); break; } } debug_level(verbose_level); DEBUG("Loading config from %s", configfile); if(cfg_load(configfile) == -1) { ERROR("Error loading config. Aborting"); return EXIT_FAILURE; } cfg_dump(); DEBUG("Starting mqtt workers"); mqtt_init(); DEBUG("Starting receive thread"); if(!nrf24_recv_init()) { ERROR("Error starting radio receiver. Abort"); exit(EXIT_FAILURE); } while(1) { sleep(1); } nrf24_recv_deinit(); mqtt_deinit(); return(EXIT_SUCCESS); }
/** * initialize - Performs all initialization procedures * * Returns a CHARLIE_STAT_* constant that indicates the succes or * failure of the initialization. */ static uint8_t initialize(void) { charlie.shutdown = FALSE; init_atmega(); init_ports(); debug_init_ports(); rs232_init(); spi_init_master(); i2c_init(); if (rtc_init()) { return CHARLIE_STAT_RTC_ERROR; } time_init(); time_sync_to_realtime(); sched_init(); if (card_init()) { return CHARLIE_STAT_CARD_ERROR; } if (fsys_init()) { return CHARLIE_STAT_FSYS_ERROR; } if (fsys_check_read_only()) { return CHARLIE_STAT_FSYS_READONLY; } cfg_load(); if (enc28j60_init(&cfg.mac_addr)) { return CHARLIE_STAT_NET_ERROR; } net_init(); adc_init(); sensors_init(); pump_init(); plants_init(); sei(); return CHARLIE_STAT_OK; }
static int app_load_cfg_profile(const char *profile) { if (profile == NULL) return 0; struct cfg_file *cfg_file = cfg_load(profile, 0); if (cfg_file == NULL) rte_exit(EXIT_FAILURE, "Cannot load configuration profile %s\n", profile); cfg_load_port(cfg_file, &port_params); cfg_load_subport(cfg_file, subport_params); cfg_load_pipe(cfg_file, pipe_profiles); cfg_close(cfg_file); return 0; }
int main(int argc, char **argv) { int rc; struct cfg_main cfg; rc = cfg_load(&cfg, argc, argv); if(rc == 0) { run_service(&cfg); } cfg_free(&cfg); if(rc > 0) { /* rc > 0 means we had some configuration error */ return rc; } else { /* rc == 0 means we have run successfully */ /* rc < 0 means we've done some config action successfully */ return 0; } }
int main (int argc, char **argv) { struct stat st; loadpath (".."); pathf (ConfigName, "templates/Phineas.xml"); Config = cfg_load (ConfigName); if (Config == NULL) fatal ("Configuration failed to load\n"); if (cfg_format () == NULL) fatal ("Configuration failed to format\n"); if (stat (ConfigPName, &st)) fatal ("Configuration not created\n"); cfg_free (); if (!stat (ConfigPName, &st)) fatal ("Configuration not removed\n"); info ("%s %s\n", argv[0], Errors ? "failed" : "passed"); exit (Errors); }
int main(int argc, char **argv) { int rc; struct cfg_main cfg; rc = cfg_load(&cfg, argc, argv); if(rc == 0) { printf("The test program is doing nothing right now!\n"); } cfg_free(&cfg); if(rc > 0) { /* rc > 0 means we had some configuration error */ return rc; } else { /* rc == 0 means we have run successfully */ /* rc < 0 means we've done some config action successfully */ return 0; } }
void Setup() { //set clock to max for init 32MHz ClockSetSource(x32MHz); //disable 2MHZ osc OSC.CTRL = 0b00000010; //get RAM info free_ram_at_start = freeRam(); //get reset reason system_rst = RST.STATUS; RST.STATUS = 0b00111111; //save power - peripherals are turned on on demand by drivers turnoff_subsystems(); EnableInterrupts(); //load device id GetID(); //init basic peripherals led_init(); uart_init_buffers(); time_init(); buzzer_init(); battery_init(); buttons_init(); //basic power control mems_power_init(); io_init(); SD_EN_INIT; //load configuration from EE cfg_load(); uart_init(); _delay_ms(100); }
void cfg_init(void) { cfg_ctx = akbuf_new_ctx(); cfg.listen_port = 8000; cfg.listen_addr.s_addr = INADDR_ANY; cfg.default_root = "dox/"; cfg.log = 1; cfg.log_level = "request"; cfg.log_file = NULL; cfg.background = 0; cfg.run_as_uid = cfg.run_as_gid = -1; cfg.chroot_dir = NULL; cfg.tracker.statslog = NULL; cfg.vhosts = akbuf_table_init(cfg_ctx, AKBUF_TABLE_NOCASE); cfg.mime_types = akbuf_table_init(cfg_ctx, AKBUF_TABLE_NOCASE); cfg.rewrite_rules = akbuf_table_init(cfg_ctx, AKBUF_TABLE_BIN); cfg.allow_clients = akbuf_table_init(cfg_ctx, AKBUF_TABLE_BIN); cfg.deny_clients = akbuf_table_init(cfg_ctx, AKBUF_TABLE_BIN); /* tracker */ cfg.tracker.interval = 360; cfg.tracker.timeout = 360 * 2; cfg.tracker.stopped_timeout = 300 * 2; cfg.tracker.respnum = 50; cfg.tracker.period = 15; cfg.tracker.sql_stats = 0; cfg.tracker.sql_host = NULL; cfg.tracker.sql_db = NULL; cfg.tracker.sql_user = NULL; cfg.tracker.sql_pass = NULL; cfg.tracker.sync = 0; cfg.tracker.sync_interval = 15; cfg.tracker.sync_size = 1400; cfg.tracker.sync_addr.s_addr = INADDR_BROADCAST; cfg.tracker.sync_port = 4242; cfg.tracker.infohash_file = NULL; cfg.tracker.infohash_interval = 30; if (cfg_load(CFG_FILE, 0) != 0) exit(1); }
int main(int argc, char **argv) { group_t *head; FILE *fp; int i; if (argc < 2) { fprintf(stderr, "Usage: %s <cfgfile>...\n", argv[0]); exit(EXIT_FAILURE); } for (i=1; i < argc; i++) { fp = fopen(argv[i], "r"); if (!fp) { fprintf(stderr, "error: unable to open file %s!\n", argv[1]); continue; } fprintf(stderr, "Parsing file %s...\n", argv[i]); head = cfg_load(fp); cfg_dump(head); cfg_free(head); } exit(EXIT_SUCCESS); }
/*********************************************************************** * * Function: boot_manager * * Purpose: Handle boot configuation and options * * Processing: * See function. * * Parameters: * allow_boot : TRUE to allow the system to autoboot * * Outputs: None * * Returns: Nothing * * Notes: None * **********************************************************************/ void boot_manager(BOOL_32 allow_boot) { UNS_8 key, str[255]; int i, idx; UNS_32 secsmt; BOOL_32 usedef = FALSE; /* Get runtime configuration */ get_rt_s1lsys_cfg(&sysinfo.sysrtcfg); /* Query FLASH */ sysinfo.nandgeom = flash_init(); /* Get S1L configuration */ if (cfg_override() != FALSE) { cfg_default(&syscfg); usedef = TRUE; } else if (cfg_load(&syscfg) == FALSE) { cfg_default(&syscfg); syscfg.scr.number_entries = 0; cfg_save(&syscfg); usedef = TRUE; } /* Initial system setup */ sys_up(); if (sysinfo.nandgeom == NULL) { term_dat_out_crlf(nanderr_msg); } /* Set saved baud rate */ term_setbaud(syscfg.baudrate); /* Default configuration used? */ if (usedef != FALSE) { term_dat_out_crlf(cfggdef_msg); } /* Display system header */ term_dat_out_crlf((UNS_8 *) ""); term_dat_out_crlf(sysinfo.sysrtcfg.system_name); term_dat_out(bdat_msg); term_dat_out((UNS_8 *) __DATE__); term_dat_out((UNS_8 *) " "); term_dat_out_crlf((UNS_8 *) __TIME__); /* No file currently loaded in memory */ sysinfo.lfile.loadaddr = 0xFFFFFFFF; sysinfo.lfile.flt = FLT_NONE; sysinfo.lfile.num_bytes = 0; sysinfo.lfile.startaddr = (PFV) 0xFFFFFFFF; sysinfo.lfile.loaded = FALSE; /* Initialize commands */ cmd_core_add_commands(); cmd_image_add_commands(); cmd_nand_add_commands(); ucmd_init(); /* Initialize line prompt and parser */ key_line_init(syscfg.prmpt); /* Prompt usually appears */ menuexit = FALSE; /* Use built in script capability? */ if ((syscfg.scr.enabled == TRUE) && (syscfg.scr.number_entries > 0)) { term_dat_out_crlf((UNS_8 *) "Running built-in script...\n"); i = idx = 0; while (i < syscfg.scr.number_entries) { /* Execute commands */ term_dat_out((UNS_8 *) "-S>"); term_dat_out_crlf(&syscfg.scr.script_data[idx]); cmd_process(&syscfg.scr.script_data[idx]); idx = idx + syscfg.scr.entry_size[i] + 1; i++; } } else { /* In prompt bypass mode? */ if (syscfg.aboot.abootsrc != SRC_NONE) menuexit = allow_boot; if ((syscfg.prmpt_to > 0) && (menuexit == TRUE)) { secsmt = get_seconds() + syscfg.prmpt_to; term_dat_out_crlf(kp_msg); while (get_seconds() < secsmt) { if (term_dat_in_ready() > 0) { term_dat_in(&key, 1); menuexit = FALSE; secsmt = get_seconds(); } } } /* Perform autoboot if possible */ if (menuexit == TRUE) { menuexit = autoboot(); } } while (menuexit == FALSE) { key_get_command(str); str_upper_to_lower(str); cmd_process(str); } /* Bring down some system items */ sys_down(); /* Execute program */ jumptoprog(sysinfo.lfile.startaddr); }
void fc_init() { DEBUG(" *** Flight computer init ***\n"); //load configuration cfg_load(); //start values eeprom_busy_wait(); active_page = eeprom_read_byte(&config.gui.last_page); fc.epoch_flight_start = 0; fc.autostart_state = false; fc.temp_step = 0; //init calculators vario_init(); audio_init(); gps_init(); if (fc.use_gps) gps_start(); bt_init(); // if (fc.use_flage & ENABLE_BT) // bt_module_init(); //VCC to baro, acc/mag gyro MEMS_POWER_ON; GpioSetDirection(IO0, OUTPUT); GpioWrite(IO0, HIGH); //init and test i2c if (!mems_i2c_init()) { DEBUG("ERROR I2C\n"); led_set(0xFF, 0, 0); } //Barometer ms5611.Init(&mems_i2c, MS5611_ADDRESS_CSB_LO); //Magnetometer + Accelerometer lsm303d_settings lsm_cfg; lsm_cfg.enabled = true; lsm_cfg.accOdr = lsm_acc_1600Hz; lsm_cfg.accScale = lsm_acc_16g; lsm_cfg.magOdr = lsm_mag_100Hz; lsm_cfg.magScale = lsm_mag_4g; lsm_cfg.magHiRes = true; lsm_cfg.tempEnable = false; //Gyro l3gd20_settings l3g_cfg; l3g_cfg.enabled = true; l3g_cfg.bw = l3g_50Hz; l3g_cfg.odr = l3g_760Hz; l3g_cfg.scale = l3g_2000dps; sht21_settings sht_cfg; sht_cfg.rh_enabled = true; sht_cfg.temp_enabled = true; //XXX: do self-test? lsm303d.Init(&mems_i2c, lsm_cfg); lsm303d.Start(); l3gd20.Init(&mems_i2c, l3g_cfg); l3gd20.Start(); sht21.Init(&mems_i2c, sht_cfg); //Measurement timer FC_MEAS_TIMER_PWR_ON; fc_meas_timer.Init(FC_MEAS_TIMER, timer_div256); //125 == 1ms fc_meas_timer.SetInterruptPriority(MEDIUM); fc_meas_timer.EnableInterrupts(timer_overflow | timer_compareA | timer_compareB | timer_compareC); fc_meas_timer.SetTop(125 * 10); // == 10ms fc_meas_timer.SetCompare(timer_A, 100); // == 0.64ms fc_meas_timer.SetCompare(timer_B, 430); // == 2.7ms fc_meas_timer.SetCompare(timer_C, 555); // == 3.7ms fc_meas_timer.Start(); DEBUG(" *** FC init done ***\n"); }
int run_suite(const char *cfgname, const char *csvname, int testnums[], int tlen) { struct cfg *cfg; FILE *csv; unsigned char buf[4096], *row[32]; int tnum, ti, ret, flags; if ((cfg = cfg_new(NULL)) == NULL || cfg_load(cfg, cfgname)) { AMSG(": %s", cfgname); return -1; } if ((csv = fopen(csvname, "r")) == NULL) { PMNF(errno, ": %s", csvname); return -1; } while ((ret = csv_row_fread(csv, buf, 4096, row, 32, ',', CSV_TRIM | CSV_QUOTES)) > 0) { if ((flags = strtol(row[1], NULL, 10)) == LONG_MIN || flags == LONG_MAX) { PMNF(errno, ": Invalid test flags: %s", row[1]); return -1; } if (flags == 0) { continue; } if ((tnum = strtol(row[0], NULL, 10)) == LONG_MIN || tnum == LONG_MAX) { PMNF(errno, ": Invalid test number: %s", row[0]); return -1; } if (tlen) { for (ti = 0; ti < tlen; ti++) { if (tnum == testnums[ti]) { break; } } if (ti == tlen) { continue; } } for (ti = 0; test_tbl[ti].test; ti++) { if (tnum == test_tbl[ti].num) { break; } } if (test_tbl[ti].test == NULL) { PMSG("Test not found: %d", tnum); return -1; } errno = 0; fprintf(stderr, "%d:%s: ", tnum, row[2]); fflush(stderr); if (test_tbl[ti].test(flags > 1 ? flags : 0, cfg, (char **)row + 4) == 0) { fprintf(stderr, "pass\n"); } else { MMSG("%d failed", tnum); } } fclose(csv); cfg_del(cfg); return ret; }
int main(int argc,char **argv) { char *logappname; // char *lockfname; char *wrkdir; char *cfgfile; char *appname; int ch; uint8_t runmode; int rundaemon,logundefined; int lockmemory; int32_t nicelevel; uint32_t locktimeout; int fd; uint8_t movewarning; struct rlimit rls; strerr_init(); mycrc32_init(); movewarning = 0; cfgfile=strdup(ETC_PATH "/mfs/" STR(APPNAME) ".cfg"); passert(cfgfile); if ((fd = open(cfgfile,O_RDONLY))<0 && errno==ENOENT) { free(cfgfile); cfgfile=strdup(ETC_PATH "/" STR(APPNAME) ".cfg"); passert(cfgfile); if ((fd = open(cfgfile,O_RDONLY))>=0) { movewarning = 1; } } if (fd>=0) { close(fd); } locktimeout = 1800; rundaemon = 1; runmode = RM_RESTART; logundefined = 0; lockmemory = 0; appname = argv[0]; while ((ch = getopt(argc, argv, "uvdfsc:t:h?")) != -1) { switch(ch) { case 'v': printf("version: %u.%u.%u\n",VERSMAJ,VERSMID,VERSMIN); return 0; case 'd': rundaemon=0; break; case 'f': runmode=RM_START; break; case 's': runmode=RM_STOP; break; case 't': locktimeout=strtoul(optarg,NULL,10); break; case 'c': free(cfgfile); cfgfile = strdup(optarg); passert(cfgfile); movewarning = 0; break; case 'u': logundefined=1; break; default: usage(appname); return 1; } } argc -= optind; argv += optind; if (argc==1) { if (strcasecmp(argv[0],"start")==0) { runmode = RM_START; } else if (strcasecmp(argv[0],"stop")==0) { runmode = RM_STOP; } else if (strcasecmp(argv[0],"restart")==0) { runmode = RM_RESTART; } else if (strcasecmp(argv[0],"reload")==0) { runmode = RM_RELOAD; } else if (strcasecmp(argv[0],"test")==0) { runmode = RM_TEST; } else if (strcasecmp(argv[0],"kill")==0) { runmode = RM_KILL; } else { usage(appname); return 1; } } else if (argc!=0) { usage(appname); return 1; } if (movewarning) { mfs_syslog(LOG_WARNING,"default sysconf path has changed - please move " STR(APPNAME) ".cfg from "ETC_PATH"/ to "ETC_PATH"/mfs/"); } if ((runmode==RM_START || runmode==RM_RESTART) && rundaemon) { makedaemon(); } else { if (runmode==RM_START || runmode==RM_RESTART) { set_signal_handlers(0); } } if (cfg_load(cfgfile,logundefined)==0) { fprintf(stderr,"can't load config file: %s - using defaults\n",cfgfile); } free(cfgfile); logappname = cfg_getstr("SYSLOG_IDENT",STR(APPNAME)); if (rundaemon) { if (logappname[0]) { openlog(logappname, LOG_PID | LOG_NDELAY , LOG_DAEMON); } else { openlog(STR(APPNAME), LOG_PID | LOG_NDELAY , LOG_DAEMON); } } else { #if defined(LOG_PERROR) if (logappname[0]) { openlog(logappname, LOG_PID | LOG_NDELAY | LOG_PERROR, LOG_USER); } else { openlog(STR(APPNAME), LOG_PID | LOG_NDELAY | LOG_PERROR, LOG_USER); } #else if (logappname[0]) { openlog(logappname, LOG_PID | LOG_NDELAY, LOG_USER); } else { openlog(STR(APPNAME), LOG_PID | LOG_NDELAY, LOG_USER); } #endif } if (runmode==RM_START || runmode==RM_RESTART) { rls.rlim_cur = MFSMAXFILES; rls.rlim_max = MFSMAXFILES; if (setrlimit(RLIMIT_NOFILE,&rls)<0) { syslog(LOG_NOTICE,"can't change open files limit to %u",MFSMAXFILES); } lockmemory = cfg_getnum("LOCK_MEMORY",0); #ifdef MFS_USE_MEMLOCK if (lockmemory) { rls.rlim_cur = RLIM_INFINITY; rls.rlim_max = RLIM_INFINITY; setrlimit(RLIMIT_MEMLOCK,&rls); } #endif nicelevel = cfg_getint32("NICE_LEVEL",-19); setpriority(PRIO_PROCESS,getpid(),nicelevel); } changeugid(); wrkdir = cfg_getstr("DATA_PATH",DATA_PATH); if (runmode==RM_START || runmode==RM_RESTART) { fprintf(stderr,"working directory: %s\n",wrkdir); } if (chdir(wrkdir)<0) { mfs_arg_syslog(LOG_ERR,"can't set working directory to %s",wrkdir); if (rundaemon) { fputc(0,stderr); close_msg_channel(); } closelog(); free(logappname); return 1; } free(wrkdir); umask(cfg_getuint32("FILE_UMASK",027)&077); /* for upgrading from previous versions of MFS */ if (check_old_locks(runmode,locktimeout)<0) { if (rundaemon) { fputc(0,stderr); close_msg_channel(); } closelog(); free(logappname); wdunlock(); return 1; } if (wdlock(runmode,locktimeout)<0) { if (rundaemon) { fputc(0,stderr); close_msg_channel(); } closelog(); free(logappname); wdunlock(); return 1; } remove_old_wdlock(); if (runmode==RM_STOP || runmode==RM_KILL || runmode==RM_RELOAD || runmode==RM_TEST) { if (rundaemon) { close_msg_channel(); } closelog(); free(logappname); wdunlock(); return 0; } #ifdef MFS_USE_MEMLOCK if (lockmemory) { if (getrlimit(RLIMIT_MEMLOCK,&rls)<0) { mfs_errlog(LOG_WARNING,"error getting memory lock limits"); } else { if (rls.rlim_cur!=RLIM_INFINITY && rls.rlim_max==RLIM_INFINITY) { rls.rlim_cur = RLIM_INFINITY; rls.rlim_max = RLIM_INFINITY; if (setrlimit(RLIMIT_MEMLOCK,&rls)<0) { mfs_errlog(LOG_WARNING,"error setting memory lock limit to unlimited"); } } if (getrlimit(RLIMIT_MEMLOCK,&rls)<0) { mfs_errlog(LOG_WARNING,"error getting memory lock limits"); } else { if (rls.rlim_cur!=RLIM_INFINITY) { mfs_errlog(LOG_WARNING,"can't set memory lock limit to unlimited"); } else { if (mlockall(MCL_CURRENT|MCL_FUTURE)<0) { mfs_errlog(LOG_WARNING,"memory lock error"); } else { mfs_syslog(LOG_NOTICE,"process memory was successfully locked in RAM"); } } } } } #else if (lockmemory) { mfs_syslog(LOG_WARNING,"memory lock not supported !!!"); } #endif fprintf(stderr,"initializing %s modules ...\n",logappname); if (initialize()) { if (getrlimit(RLIMIT_NOFILE,&rls)==0) { syslog(LOG_NOTICE,"open files limit: %lu",(unsigned long)(rls.rlim_cur)); } fprintf(stderr,"%s daemon initialized properly\n",logappname); if (rundaemon) { close_msg_channel(); } if (initialize_late()) { mainloop(); ch=0; } else { ch=1; } } else { fprintf(stderr,"error occured during initialization - exiting\n"); if (rundaemon) { fputc(0,stderr); close_msg_channel(); } ch=1; } destruct(); free_all_registered_entries(); signal_cleanup(); cfg_term(); strerr_term(); closelog(); free(logappname); wdunlock(); return ch; }
int main(void) { unsigned char ret; if(snd_pmd_resident()) { snd_mmd_resident(); if(game_init_op()) { zun_error(ERROR_OUT_OF_MEMORY); return 1; } extra_unlocked = score_cleared_load(); if(cfg_load() == 1) { return 1; } } else { return 1; } gaiji_backup(); gaiji_entry_bfnt("MIKOFT.bft"); if(mikoconfig->demo_num == 0) { demo_num = 1; snd_kaja_func(KAJA_SONG_STOP, 0); } else { demo_num = mikoconfig->demo_num + 1; if(demo_num > 3) { demo_num = 1; } score_duration = 350; score_menu(); graph_showpage(0); graph_accesspage(0); } input = 0; snd_active = snd_bgm_mode; if(!mikoconfig->demo_num && snd_midi_possible) { char midi_active = snd_midi_active; snd_midi_active = 1; snd_load("gminit.m", SND_LOAD_SONG); snd_kaja_func(KAJA_SONG_PLAY, 0); snd_midi_active = midi_active; } op_animate(); pi_slot_load(2, "ts3.pi"); pi_slot_load(1, "ts2.pi"); input = 0; idle_frames = 0; while(!quit) { input_sense(); if(in_option == 0) { main_update_and_render(); } else if(in_option == 1) { option_update_and_render(); } mikoconfig->frame++; idle_frames++; frame_delay(1); } ret = mikoconfig->op_main_retval; mikoconfig_sgm = 0; cfg_save(); text_clear(); graph_clear(); game_exit_to_dos(); gaiji_restore(); return ret; }
int main(int argc, char *argv[]) { #ifdef _USE_UNPACK int clean_tmp = 0; #endif int err = 0; int i; #ifdef __APPLE__ macosx_init(); #endif #ifndef S60 putenv("SDL_MOUSE_RELATIVE=0"); /* test this! */ #endif #ifdef _WIN32_WCE libwince_init(argv[0], 1); wince_init(argv[0]); #else #ifdef S60 extern char s60_data[]; strcpy(game_cwd, s60_data); #else #ifdef _WIN32 strcpy(game_cwd, dirname(argv[0])); #else if (!getcwd(game_cwd, sizeof(game_cwd))) fprintf(stderr,"Warning: can not get current dir\n."); #endif #endif #endif unix_path(game_cwd); setdir(game_cwd); for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-vsync")) vsync_sw = 1; else if (!strcmp(argv[i], "-nosound")) nosound_sw = 1; else if (!strcmp(argv[i], "-fullscreen")) fullscreen_sw = 1; else if (!strcmp(argv[i], "-mode")) { if ((i + 1) < argc) mode_sw = argv[++i]; else mode_sw = "-1x-1"; } else if (!strcmp(argv[i], "-window")) window_sw = 1; else if (!strcmp(argv[i], "-debug")) { if (!debug_sw) debug_init(); debug_sw = 1; } else if (!strcmp(argv[i], "-owntheme")) owntheme_sw = 1; else if (!strcmp(argv[i], "-noautosave")) noauto_sw = 1; else if (!strcmp(argv[i], "-game")) { if ((i + 1) < argc) game_sw = argv[++i]; else game_sw = ""; } else if (!strcmp(argv[i], "-theme")) { if ((i + 1) < argc) theme_sw = argv[++i]; else theme_sw = ""; } else if (!strcmp(argv[i], "-nostdgames")) { nostdgames_sw = 1; #ifdef _LOCAL_APPDATA } else if (!strcmp(argv[i], "-appdata")) { if ((i + 1) < argc) appdata_sw = argv[++i]; else appdata_sw = ""; #endif } else if (!strcmp(argv[i], "-chunksize")) { if ((i + 1) < argc) chunksize_sw = atoi(argv[++i]); else chunksize_sw = DEFAULT_CHUNKSIZE; } else if (!strcmp(argv[i], "-gamespath")) { if ((i + 1) < argc) games_sw = argv[++i]; else games_sw = ""; } else if (!strcmp(argv[i], "-themespath")) { if ((i + 1) < argc) themes_sw = argv[++i]; else themes_sw = ""; } else if (!strcmp(argv[i], "-idf")) { if ((i + 1) < argc) idf_sw = argv[++i]; else { fprintf(stderr,"No data directory specified.\n"); err = 1; goto out; } } else if (!strcmp(argv[i], "-encode")) { if ((i + 1) < argc) encode_sw = argv[++i]; else { fprintf(stderr,"No lua file specified.\n"); err = 1; goto out; } if ((i + 1) < argc) encode_output = argv[++i]; else encode_output = "lua.enc"; } else if (!strcmp(argv[i], "-version")) { version_sw = 1; } else if (!strcmp(argv[i], "-nopause")) { nopause_sw = 1; } else if (!strcmp(argv[i], "-software")) { software_sw = 1; #ifdef _USE_UNPACK } else if (!strcmp(argv[i], "-install")) { if ((i + 1) < argc) { char *file = argv[++i]; char *p; if (games_sw) p = games_sw; else p = game_local_games_path(1); if (setup_zip(file, p)) { err = 1; goto out; } } #endif } else if (!strcmp(argv[i], "-quit")) { exit(0); } else if (!strcmp(argv[i], "-hinting")) { if ((i + 1) < argc) hinting_sw = atoi(argv[++i]); else hinting_sw = 1; } else if (!strcmp(argv[i], "-lua") || !strcmp(argv[i], "-luac")) { if ((i + 1) < argc) { lua_exec = !strcmp(argv[i], "-lua"); lua_sw = argv[++ i]; opt_index = i + 1; break; } else { fprintf(stderr, "No lua script.\n"); err = 1; goto out; } } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "-help") || !strcmp(argv[i], "--help")) { usage(); goto out; } else if (argv[i][0] == '-') { fprintf(stderr,"Unknown option: %s\n", argv[i]); usage(); err = 1; goto out; } else if (!start_idf(argv[i])) { fprintf(stderr, "Adding idf: %s\n", argv[i]); } else if (!run_game(argv[i])) { fprintf(stderr, "Opening game: %s\n", argv[i]); } #ifdef _USE_UNPACK else { char *p; if (games_sw) p = games_sw; else p = game_tmp_path(); if (setup_zip(argv[i], p)) { err = 1; goto out; } clean_tmp = 1; } #endif } cfg_load(); if (opt_debug == 1 && debug_sw == 0) { debug_sw = 1; debug_init(); } if (opt_vsync == 1 && vsync_sw == 0) vsync_sw = 1; if (version_sw) { fprintf(stdout, VERSION"\n"); goto out; } if (lua_sw) { err = instead_init_lua(dirname(lua_sw)); if (err) goto out; if (!err) err = instead_loadscript(lua_sw, argc - opt_index, argv + opt_index, lua_exec); instead_done(); goto out; } if (encode_sw) { err = instead_encode(encode_sw, encode_output); goto out; } if (idf_sw) { char *p = malloc(strlen(idf_sw) + 5); if (p) { char *b; strcpy(p, idf_sw); b = basename(p); strcat(b, ".idf"); idf_create(b, idf_sw); free(p); } else idf_create("data.idf", idf_sw); goto out; } menu_langs_lookup(dirpath(LANG_PATH)); if (!langs_nr) { fprintf(stderr, "No languages found in: %s.\n", dirpath(LANG_PATH)); err = 1; goto out; } if (!opt_lang || !opt_lang[0]) opt_lang = game_locale(); if (menu_lang_select(opt_lang) && menu_lang_select(LANG_DEF)) { fprintf(stderr, "Can not load default language.\n"); err = 1; goto out; } if (games_sw) games_lookup(games_sw); if (owntheme_sw && !opt_owntheme) { opt_owntheme = 2; } if (!nostdgames_sw && games_lookup(dirpath(GAMES_PATH))) fprintf(stderr, "No games found in: %s.\n", GAMES_PATH); if (themes_sw) themes_lookup(themes_sw); if (!nostdthemes_sw) { themes_lookup(dirpath(THEMES_PATH)); themes_lookup(game_local_themes_path()); } if (!nostdgames_sw) games_lookup(game_local_games_path(0)); if (start_idf_sw) { char *d, *b; char *dd, *bb; static char idf_game[255]; d = strdup(start_idf_sw); b = strdup(start_idf_sw); if (d && b) { dd = dirname(d); bb = basename(b); if (!games_replace(dirpath(dd), bb)) { game_sw = idf_game; strncpy(idf_game, bb, sizeof(idf_game) - 1); idf_game[sizeof(idf_game) - 1] = 0; } } if (d) free(d); if (b) free(b); } if (noauto_sw && opt_autosave) opt_autosave = 2; if (window_sw) opt_fs = 0; if (fullscreen_sw) opt_fs = 1; if (mode_sw) parse_mode(mode_sw, opt_mode); if (game_sw) { FREE(opt_game); opt_game = game_sw; } if (theme_sw) { FREE(opt_theme); opt_theme = theme_sw; } if (opt_theme) game_theme_select(opt_theme); if (!curtheme_dir) game_theme_select(DEFAULT_THEME); /* Initialize SDL */ if (gfx_init() < 0) return -1; #ifdef _USE_GTK gtk_init(&argc, &argv); /* must be called AFTER SDL_Init when using SDL2 */ #endif if (gfx_video_init() || input_init()) return -1; if (game_init(opt_game)) { game_error(); } game_loop(); cfg_save(); game_done(0); gfx_video_done(); #ifndef ANDROID gfx_done(); #endif out: if (debug_sw) debug_done(); #ifdef _USE_GTK /* gtk_main_quit (); */ #endif #ifdef _USE_UNPACK if (clean_tmp) remove_dir(game_tmp_path()); #endif #if defined(ANDROID) || defined(IOS) exit(err); #endif return err; }
static int pack_image(const char *indn, const char *outfn) { struct imagewty_header *header; group_t *head, *filelist; uint32_t i, num_files; variable_t *var; FILE *cfp, *ofp; void *p; /* try to open image configuration */ cfp = dir_fopen(indn, "image.cfg", "r"); if (cfp == NULL) { fprintf(stderr, "Error: unable to open %s/%s!\n", indn, "image.cfg"); return -ENOENT; } ofp = fopen(outfn, "wb"); if (ofp == NULL) { fprintf(stderr, "Error: could not create image file %s!\n", outfn); fclose(cfp); return -ENOENT; } /* file is there, now try to load it */ head = cfg_load(cfp); fclose(cfp); if (head == NULL) { fprintf(stderr, "Error: failed to parse %s/%s!\n", indn, "image.cfg"); return -EINVAL; } /* Got configuration, time to start packing it all up! */ var = cfg_find_var("filelist", head); if (var == NULL || var->type != VT_STRING) { fprintf(stderr, "Error: Unable to find filelist string " "variable in configuration!\n"); cfg_free(head); return -EINVAL; } filelist = cfg_find_group(var->str, head); if (filelist == NULL) { fprintf(stderr, "Error: unable to find group %s!\n", var->str); cfg_free(head); return -EINVAL; } num_files = cfg_count_vars(filelist); if (!num_files) { fprintf(stderr, "Error: no files to pack found in configuration!\n"); cfg_free(head); return -EINVAL; } p = malloc(1024 + num_files * 1024); if (p == NULL) { fprintf(stderr, "Error: failed to allocate memory for image!\n"); cfg_free(head); return -ENOMEM; } /* Initialize image file header */ memset(p, 0, 1024 + num_files * 1024); header = p; memcpy(header->magic, IMAGEWTY_MAGIC, sizeof(header->magic)); header->header_version = 0x0100; header->header_size = 0x50; /* should be 0x60 for version == 0x0300 */ header->ram_base = 0x04D00000; header->version = cfg_get_number("version", head); header->image_size = 0; /* this will be filled in later on */ header->image_header_size = 1024; header->v1.pid = cfg_get_number("pid", head); header->v1.vid = cfg_get_number("vid", head); header->v1.hardware_id = cfg_get_number("hardwareid", head); header->v1.firmware_id = cfg_get_number("firmwareid", head); header->v1.val1 = 1; header->v1.val1024 = 1024; header->v1.num_files = num_files; header->v1.num_files = cfg_count_vars(filelist); header->v1.val1024_2 = 1024; /* Setup file headers */ { uint32_t offset = (num_files +1) * 1024; struct imagewty_file_header *fheaders; variable_t *var; fheaders = (struct imagewty_file_header*) (p + 1024); for(var=filelist->vars; var; var=var->next) { variable_t *v, *fn = NULL, *mt = NULL, *st = NULL; uint32_t size; FILE *fp; for (v=var->items; v; v=v->next) { if (v->type != VT_STRING) continue; if (strcmp(v->name, "filename") == 0) fn = v; else if (strcmp(v->name, "maintype") == 0) mt = v; else if (strcmp(v->name, "subtype") == 0) st = v; } if (!fn || !mt || !st) { fprintf(stderr, "Error: incomplete filelist item!\n"); return -EINVAL; } fheaders->filename_len = IMAGEWTY_FHDR_FILENAME_LEN; fheaders->total_header_size = 1024; strcpy((char*)fheaders->v1.filename, fn->str); strcpy((char*)fheaders->maintype, mt->str); strcpy((char*)fheaders->subtype, st->str); fp = dir_fopen(indn, fn->str, "rb"); if (fp) { fseek(fp, 0, SEEK_END); size = ftell(fp); fclose(fp); } else { fprintf(stderr, "Error: unable to read file '%s'!\n", fn->str); continue; } fheaders->v1.offset = offset; fheaders->v1.stored_length = fheaders->v1.original_length = size; if (fheaders->v1.stored_length & 0x1FF) { fheaders->v1.stored_length &= ~0x1FF; fheaders->v1.stored_length += 0x200; } offset += fheaders->v1.stored_length; fheaders = (struct imagewty_file_header*) ((uint8_t*)fheaders + 1024); } /* We now know the total size of the file; patch it into the main header */ if (offset & 0xFF) offset = (offset & 0xFF) + 0x100; header->image_size = offset; } /* Now we have all headers setup in memory, time to write out the image file */ fwrite(p, 1024, num_files +1, ofp); /* now write the file content too */ for (i = 1; i <= num_files; i++) { struct imagewty_file_header *h = (struct imagewty_file_header*)(p + i * 1024); FILE *fp = dir_fopen(indn, h->v1.filename, "rb"); if (fp != NULL) { char buf[512]; size_t size = 0; while(!feof(fp)) { size_t bytesread = fread(buf, 1, 512, fp); if (bytesread) { if (bytesread & 0x1ff) bytesread = (bytesread & ~0x1ff) + 0x200; if (flag_encryption_enabled) rc6_encrypt_inplace(buf, bytesread, &filecontent_ctx); fwrite(buf, 1, bytesread, ofp); } size += bytesread; } fclose(fp); } } /* Headers no longer used; encrypt and write if requested */ if (flag_encryption_enabled) { void *curr = rc6_encrypt_inplace(p, 1024, &header_ctx); rc6_encrypt_inplace(curr, num_files * 1024, &fileheaders_ctx); rewind(ofp); fwrite(p, 1024, num_files +1, ofp); } fclose(ofp); /* Done, free configuration, no longer needed */ cfg_free(head); return 0; }
CServer::CServer() { cfg_load((char*)CFG_FILE_NAME); server_id = cfg_get_id(); robot_id = 0; printf("\n\n"); printf(" address: %s port : %i id %lu\n", cfg_get_server_name(), cfg_get_port(), (long unsigned int)server_id); debug_log_add((char*)"server init done"); map = new CMap(0, 0, 34, 19, 55.0, 55.0); //if (map->load((char*)"map_targets.txt") == 0) if (map->load((char*)"line_test.txt") == 0) { printf("map success loaded\n"); } else { printf("map loading failed\n"); } position_max[0] = map->get_width()/2.0; position_max[1] = map->get_height()/2.0; print_time = 0.0; dt = 10.0; time = 0.0; time_refresh = 0.0; colision_distance = 1.0; sprintf(text,"server"); red_score = 0.0; green_score = 0.0; blue_score = 0.0; #ifdef VISUALISATION_IN_SERVER g_visualisation.window_width = VISUALISATION_SCREEN_WIDTH; g_visualisation.window_height = VISUALISATION_SCREEN_HEIGHT; g_visualisation.base_size = VISUALISATION_ROBOT_SIZE; g_visualisation.position_max_x = position_max[0]; g_visualisation.position_max_y = position_max[1]; g_visualisation.position_max_z = 2.0; visualisation_init(); g_visualisation.text_s = text; #endif //TODO u32 width = 2*position_max[0]*position_max[1]; u32 height = 4; //printf("%f %f %u\n", position_max[0], position_max[1], width); u32 i; for (i = 0; i < ROBOT_TYPE_COUNT; i++) { class CCollectiveBrain *tmp; tmp = new CCollectiveBrain(width, height); char file_name[256]; sprintf(file_name, "collective_brain_%i", i); tmp->load_from_file(file_name); collective_brain.push_back(tmp); } #ifdef ROBOTS_IN_SERVER init_robots(0); #endif this->printing_thread = new std::thread(&CServer::print, this); debug_log_add((char*)"server start sucess"); }
int main(int argc, char ** argv) { int c; int fd; int rc; int i; int fRun = 0; int fDaemon = 0; int fUpdate = 0; int fConvert = 0; int fSQL = 0; int fDumpGates = 0; accbase_t Accbase_temp; acc_t new_acc; acc_t_old old_acc; char ** row; res_coreinit(); openlog(__progname, LOG_PID | LOG_NDELAY, LOG_DAEMON); // DumpQuery = 1; /* A 1. Redefine service port u 2. Update access at start d 3. Run Daemon c 4. Run console */ while ((c = getopt(argc, argv, OPTS)) != -1) { switch (c) { case 'A': ForceService = strtol(optarg, NULL, 10); break; case '2': fSQL = 1; break; case 'v': // verbose - show queries DumpQuery = 1; break; case 'f': Config_path = optarg; break; case 'c': ld->fStdio = 1; fRun = 1; break; case 'd': fDaemon = 1; fRun = 1; break; case 'u': fUpdate = 1; break; case 'o': fConvert = 1; break; case 't': proc_title = optarg; break; case 'Q': QueryFilename = optarg; break; case 'g': fDumpGates = 1; break; case 'q': QuietMode = 1; break; case 'h': case '?': usage(0); default: usage(-1); } } // Load configuration if (QuietMode == 0) fprintf(stderr, "Loading base configuration ... "); rc = conf_load(Config_path); if (rc < 0) { fprintf(stderr, "FAILURE\n"); syslog(LOG_ERR, "FAILURE - Can't load configuration"); exit(-1); } if (QuietMode == 0) fprintf(stderr, "OK.\n"); if (fSQL) { if (QuietMode == 0) fprintf(stderr, "Loading SQL configuration ... "); rc = cfg_load(Config_path, &config); if (rc < 0) { fprintf(stderr, "ERROR (Fatal, see syslog).\n"); exit(-1); } if (QuietMode == 0) fprintf(stderr, "OK.\nLoading scripts ... "); rc = qlist_load(config.DBscripts); if (rc < 0) { fprintf(stderr, "ERROR (fatal)\n"); exit(-1); } if (QuietMode == 0) fprintf(stderr, "OK.\n"); } // if fSQL // Converting old account table if (fConvert != 0) { fprintf(stderr, "Converting database ... "); // Open old account file rc = acc_baseopen(&Accbase_temp, accbase_name_old); if (rc != SUCCESS) { fprintf(stderr, "FAILURE - Can't open old account table\n"); exit(-1); } // Open new account file rc = acc_baseopen(&Accbase, conf_accfile); if (rc != SUCCESS) { rc = open(conf_accfile, O_RDONLY | O_CREAT | O_EXCL, 0600); if (rc < 0) { fprintf(stderr, "FAILURE - Can't open/create new account table\n"); exit(-1); } close(rc); rc = acc_baseopen(&Accbase, conf_accfile); if (rc != SUCCESS) { fprintf(stderr, "FAILURE - Can't open created account table\n"); exit(-1); } } // Ensure, that new table is empty rc = acc_reccount(&Accbase); if (rc != 0) { fprintf(stderr, "FAILURE - New account table must be empty !\n"); exit(-1); } // Copy accounts data memset(&new_acc, 0, sizeof(new_acc)); for(i=0; 1; i++) { rc = acci_get_old(&Accbase_temp, i, &old_acc); if (rc == IO_ERROR) { fprintf(stderr, "FAILURE - I/O error on read, (%d accounts copied) !\n", i); exit(-1); } if (rc == NOT_FOUND) break; new_acc.tag = old_acc.tag; new_acc.accno = old_acc.accno; new_acc.balance = old_acc.balance; new_acc.start = old_acc.start; new_acc.stop = old_acc.stop; new_acc.tariff = old_acc.reserv[0]; rc = acc_add(&Accbase, &new_acc); if (rc == IO_ERROR) { fprintf(stderr, "FAILURE - I/O error on write, (%d accounts copied) !\n", i); exit(-1); } if (rc != i) { fprintf(stderr, "FAILURE - Accno sync error (%d accounts copied) !\n", i); exit(-1); } } acc_baseclose(&Accbase_temp); acc_baseclose(&Accbase); fprintf(stderr, "SUCCESS (%d accounts copied) !\n", i); exit(-1); } if (fDaemon != 0 && ld->fStdio != 0) { fprintf(stderr, "Can't daemonize in console mode\n"); fDaemon = 0; } // Load gates table (check file integrity) rc = reslinks_load(LOCK_SH); if (rc != SUCCESS) { syslog(LOG_ERR, "Can't load gates file"); exit (-1); } if (fDumpGates) { printf("SET client_encoding = 'KOI8';\n\n"); printf("TRUNCATE beegates;\n"); printf("COPY beegates (res_id, rid, acc_id, ident) FROM stdin;\n"); for (i=0; i < linktabsz; i++) { printf ("%d\t%d\t%d\t%s\n", linktab[i].res_id, linktab[i].user_id, linktab[i].accno, linktab[i].username); } printf("\\.\n"); rc = acc_baseopen(&Accbase, conf_accfile); if (rc < 0) { syslog(LOG_ERR, "Can't open account database"); exit (-1); } printf("TRUNCATE beeaccs;\n"); printf("COPY beeaccs (id, tag_deleted, tag_broken, tag_frozen, tag_off, tag_unlim, tag_payman, tag_log, " "balance, tariff_id, inetin_summ, inetout_summ, money_summ, tcredit " ") FROM stdin;\n"); c = acc_reccount(&Accbase); for (i=0; i < c; i++) { rc = acc_get(&Accbase, i, &new_acc); if (rc < 0 && rc > ACC_BROKEN) continue; printf ("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%g\t%d\t%lld\t%lld\t%g\t%g\n", i, new_acc.tag & ATAG_DELETED ? "t":"f", new_acc.tag & ATAG_BROKEN ? "t":"f", new_acc.tag & ATAG_FROZEN ? "t":"f", new_acc.tag & ATAG_OFF ? "t":"f", new_acc.tag & ATAG_UNLIMIT ? "t":"f", new_acc.tag & ATAG_PAYMAN ? "t":"f", new_acc.tag & ATAG_LOG ? "t":"f", new_acc.balance, new_acc.tariff, new_acc.inet_summ_in, new_acc.inet_summ_out, new_acc.money_summ, new_acc.tcredit); } printf("\\.\n"); exit(0); } // Open database (to check & update if needed) rc = acc_baseopen(&Accbase, conf_accfile); if (rc < 0) { syslog(LOG_ERR, "Can't open account database"); exit (-1); } rc = log_baseopen(&Logbase, conf_logfile); if (rc < 0) { syslog(LOG_ERR, "Can't open log database"); exit (-1); } rc = tariffs_load(conf_tariffile); if (rc < 0) { syslog(LOG_ERR, "Can't open tariff database"); exit (-1); } if (fSQL) { fprintf(stderr, "SQL init ... "); // Initialize connection DBdata = db2_init(config.DBtype, config.DBhost, config.DBname); if (DBdata == NULL) { fprintf(stderr, "FAULT. db_init() fails.\n"); exit (-1); } // Open database rc = db2_open(DBdata, config.DBlogin, config.DBpass); if (rc < 0) { fprintf(stderr, "FAULT. db_open() fails.\n"); exit (-1); } fprintf(stderr, "OK.\n"); // Perform immediate query from file if (QueryFilename != NULL) { fd = open(QueryFilename, O_RDONLY, 0); if (fd >= 0) { c = 0; rc = ioctl(fd, FIONREAD, &c); if (rc >= 0 && c > 1) { QueryBuffer = (char*)calloc(1, c + 1); if (QueryBuffer != NULL) { rc = read(fd, QueryBuffer, c); if (rc == c) { if (DumpQuery) printf("%s", QueryBuffer); rc = db2_execute(DBdata, "%s", QueryBuffer); if (rc < 0) fprintf(stderr, "QUERY: SQL error\n"); else fprintf(stderr, "QUERY: done.\n"); } else fprintf(stderr, "QUERY: File read error\n"); free(QueryBuffer); QueryBuffer = NULL; } else fprintf(stderr, "QUERY: Memory allocation error\n"); } else fprintf(stderr, "QUERY: File size error\n"); close(fd); } else fprintf(stderr, "QUERY: File access error - %s\n", strerror(errno)); } // Perform test query row = db2_search(DBdata, 0, "SELECT count(*) FROM accs"); if (row == NULL) { fprintf(stderr, "Test fails.\n"); exit (-1); } else fprintf(stderr, "Test OK. (%s accounts).\n", *row); } // if fSQL // Update resources permissions if (fUpdate != 0) access_update(); // Close database acc_baseclose(&Accbase); log_baseclose(&Logbase); tariffs_free(); // Close database if (fSQL) { rc = db2_close(DBdata); if (rc < 0) { fprintf(stderr, "FATAL: db2_close() fails.\n\n"); exit (-1); } } // if fSQL // Start server if (fRun) { if (fDaemon) { rc = daemon(0, 0); if (rc != SUCCESS) { syslog(LOG_ERR, "Can't daemonize, closing"); exit(-1); } if (proc_title == NULL) setproctitle("(daemon)"); else setproctitle(proc_title); } if (setenv("HOME", "/root", 0) == (-1)) syslog(LOG_ERR, "setenv(): %m"); rc = link_wait(ld, ForceService < 0 ? conf_coreport : ForceService); if (rc != -1) { if (ld->fStdio == 0) setproctitle("(child)"); else { if (proc_title == NULL) setproctitle("(console)"); else setproctitle(proc_title); } cmd_out(RET_COMMENT, "Billing ver %d.%d.%d.%d", VER_VER, VER_SUBVER, VER_REV, VER_SUBREV); cmd_out(RET_COMMENT, "loading configuration ..."); conf_free(); rc = conf_load(Config_path); if (rc < 0) { cmd_out(ERR_IOERROR, "failure"); exit(-1); } cmd_out(RET_COMMENT, "loading gates ..."); // ReLoad linktable rc = reslinks_load(LOCK_SH); if (rc != SUCCESS) { cmd_out(ERR_IOERROR, "failure: %s", strerror(errno)); exit(-1); } // Open database cmd_out(RET_COMMENT, "opening accounts ..."); rc = acc_baseopen(&Accbase, conf_accfile); if (rc < 0) { syslog(LOG_ERR, "Can't reopen account database"); cmd_out(ERR_IOERROR, "failure: %s", strerror(errno)); exit(-1); } cmd_out(RET_COMMENT, "opening log ..."); rc = log_baseopen(&Logbase, conf_logfile); if (rc < 0) { syslog(LOG_ERR, "Can't reopen log database"); cmd_out(ERR_IOERROR, "failure: %s", strerror(errno)); exit(-1); } cmd_out(RET_COMMENT, "loading tariffs ..."); rc = tariffs_load(conf_tariffile); if (rc < 0) { syslog(LOG_ERR, "Can't reopen tariff database"); cmd_out(ERR_IOERROR, "failure"); exit(-1); } if (fSQL) { cmd_out(RET_COMMENT, "connecting SQL ..."); rc = db2_open(DBdata, config.DBlogin, config.DBpass); if (rc < 0) { syslog(LOG_ERR, "Can't reopen SQL connection"); cmd_out(ERR_IOERROR, "FAILURE"); exit(-1); } /* if (ld->fStdio) { row = dbex_search(DBdata, 0, "log_session"); if (row == NULL || row[0] == NULL) { cmd_out(ERR_SYSTEM, "Session open failure"); exit(-1); } SessionId = strtoll(row[0], NULL, 10); if (SessionId < 1) { cmd_out(ERR_SYSTEM, "Session open failure (invalid id returned)"); exit(-1); } cmd_out(RET_COMMENT, "Log session (id: %lld)", SessionId); SessionPerm = PERM_SUPERUSER; strlcpy(SessionLogin, "admin", sizeof(SessionLogin)); UserId = 1; cmd_out(RET_COMMENT, "Root autologin ..."); } */ } // if fSQL cmd_out(RET_SUCCESS, "Ready"); while(1) { rc = link_gets(ld, sbuf, sizeof(sbuf)); if (rc == LINK_DOWN) break; if (rc == SUCCESS) { rc = cmd_exec(sbuf, NULL); if (rc == LINK_DOWN || rc == CMD_EXIT) break; } } } } // Close SQL connection if (fSQL) db2_close(DBdata); acc_baseclose(&Accbase); log_baseclose(&Logbase); return 0; }
void vifm_restart(void) { FileView *tmp_view; curr_stats.restart_in_progress = 1; /* All user mappings in all modes. */ vle_keys_user_clear(); /* User defined commands. */ execute_cmd("comclear"); /* Autocommands. */ vle_aucmd_remove(NULL, NULL); /* Directory histories. */ ui_view_clear_history(&lwin); ui_view_clear_history(&rwin); /* All kinds of history. */ (void)hist_reset(&cfg.search_hist, cfg.history_len); (void)hist_reset(&cfg.cmd_hist, cfg.history_len); (void)hist_reset(&cfg.prompt_hist, cfg.history_len); (void)hist_reset(&cfg.filter_hist, cfg.history_len); cfg.history_len = 0; /* Session status. Must be reset _before_ options, because options take some * of values from status. */ (void)reset_status(&cfg); /* Options of current pane. */ reset_options_to_default(); /* Options of other pane. */ tmp_view = curr_view; curr_view = other_view; load_view_options(other_view); reset_options_to_default(); curr_view = tmp_view; /* File types and viewers. */ ft_reset(curr_stats.exec_env_type == EET_EMULATOR_WITH_X); /* Undo list. */ reset_undo_list(); /* Directory stack. */ dir_stack_clear(); /* Registers. */ regs_reset(); /* Clear all marks and bookmarks. */ clear_all_marks(); bmarks_clear(); /* Reset variables. */ clear_envvars(); init_variables(); /* This update is needed as clear_variables() will reset $PATH. */ update_path_env(1); reset_views(); read_info_file(1); flist_hist_save(&lwin, NULL, NULL, -1); flist_hist_save(&rwin, NULL, NULL, -1); /* Color schemes. */ if(stroscmp(curr_stats.color_scheme, DEF_CS_NAME) != 0 && cs_exists(curr_stats.color_scheme)) { if(cs_load_primary(curr_stats.color_scheme) != 0) { cs_load_defaults(); } } else { cs_load_defaults(); } cs_load_pairs(); cfg_load(); exec_startup_commands(&vifm_args); curr_stats.restart_in_progress = 0; /* Trigger auto-commands for initial directories. */ vle_aucmd_execute("DirEnter", lwin.curr_dir, &lwin); vle_aucmd_execute("DirEnter", rwin.curr_dir, &rwin); update_screen(UT_REDRAW); }
int main(int argc, char **argv) { int c; sigset_t set; const char *cfgfile = NULL; const char *jobfile = NULL; const char *defconf = "doozer-agent.json"; signal(SIGPIPE, handle_sigpipe); while((c = getopt(argc, argv, "c:s:j:")) != -1) { switch(c) { case 'c': cfgfile = optarg; break; case 's': enable_syslog("doozer-agent", optarg); break; case 'j': jobfile = optarg; break; } } sigfillset(&set); sigprocmask(SIG_BLOCK, &set, NULL); srand48(getpid() ^ time(NULL)); if(cfg_load(cfgfile, defconf)) { fprintf(stderr, "Unable to load config (check -c option). Giving up\n"); exit(1); } create_heaps(); if(geteuid() == 0) { get_uid_gid(); if(setgid(build_gid)) { trace(LOG_ERR, "Unable to setgid(%d) -- %s", build_gid, strerror(errno)); exit(1); } if(seteuid(build_uid)) { trace(LOG_ERR, "Unable to seteuid(%d) -- %s", build_uid, strerror(errno)); } } git_threads_init(); artifact_init(); agent_init(jobfile); running = 1; sigemptyset(&set); sigaddset(&set, SIGTERM); sigaddset(&set, SIGINT); sigaddset(&set, SIGHUP); signal(SIGTERM, doexit); signal(SIGINT, doexit); signal(SIGHUP, doreload); pthread_sigmask(SIG_UNBLOCK, &set, NULL); while(running) { if(reload) { reload = 0; if(!cfg_load(NULL, defconf)) { } } pause(); } spawn_stop_all(); trace(LOG_NOTICE, "Waiting for jobs to stop"); agent_join(); return 0; }
int main(int argc, char *argv[]) { pthread_t thread_wdt; pthread_t thread_log; pthread_t thread_fifoSrv; pthread_t thread_snmpSrv; pthread_t thread_sendfifo; pthread_t thread_ch1, thread_ch2; pthread_t thread_rtSend, thread_rtRecv; struct wdt_thread_arg wdt_targ; struct log_thread_arg log_targ; struct fifo_thread_arg fifoSrv_targ; struct snmp_thread_arg snmpSrv_targ; struct sfifo_thread_arg sendfifo_targ; struct chan_thread_arg ch1_targ, ch2_targ; struct rt_thread_arg rtSend_targ, rtRecv_targ; int result; char cfile[64]; char lfile[64]; char lfile_old[64]; char lifeFile[64]; int rs_parity, rs_databits, rs_stopbit; int rs_speed; unsigned int utxdel; int tscan; int tout, nretries; int wdt_en; unsigned long wdt_tm; int ch1_enable, ch2_enable; char ip[16]; unsigned int fifo_port; char rt_ipSend[16]; char rt_ipRecv[16]; unsigned int rt_portSend, rt_portRecv; char logSend_ip[16]; unsigned int logSend_port, logMaxLines; int snmp_n, snmp_uso; char *tempip; char ls_gen[32]; char req_ag[32]; char req_ns[32]; char req_gl[32]; char req_ms[32]; int cdDest; int cdaId; int cdnsId; int cdquLogId; int cdmsId; int i; char key[7] = {0}; TOHT *cfg; if( argc == 2) sprintf(cfile, argv[1]); else { sprintf(cfile, "mslave_default.cfg"); gen_moxa_default_cfg(cfile); /** Генерация slave конфиг файла * по умолчанию */ } cfg = cfg_load(cfile); /** Загрузили общий конфиг */ /** Установка лог файла */ sprintf(lfile, cfg_getstring(cfg, "moxa:log", NULL)); sprintf(lfile_old, cfg_getstring(cfg, "moxa:log_old", NULL)); bo_setLogParam(lfile, lfile_old, 0, 1000); /** Генерация таблицы для расчета контрольной суммы * кадра сети RS485 по алгоритму CRC16-MODBUS */ gen_tbl_crc16modbus(); /** Установка таймеров */ tscan = cfg_getint(cfg, "moxa:Tscan", -1); tout = cfg_getint(cfg, "moxa:Tout", -1); nretries = cfg_getint(cfg, "moxa:nRetries", -1); /** Установка параметров WatchDog */ wdt_targ.tsec = cfg_getint(cfg, "WDT:Tsec", -1); wdt_targ.tusec = cfg_getint(cfg, "WDT:Tusec", -1); wdt_tm = (unsigned long)cfg_getint(cfg, "WDT:Tms", -1); wdt_en = cfg_getint(cfg, "WDT:enable", -1); /** Инициализация файла для контроля жизни программы через CRON */ sprintf(lifeFile, cfg_getstring(cfg, "WDT:lifeFile", NULL)); /* gen_moxa_cron_life(lifeFile); */ /** IP адрес узла */ sprintf(ip, cfg_getstring(cfg, "eth0:ip", NULL)); /** FIFO сервер */ fifo_port = (unsigned int)cfg_getint(cfg, "FIFO:port", -1); fifoSrv_targ.qu_len = cfg_getint(cfg, "FIFO:queue_len", -1); fifoSrv_targ.len = cfg_getint(cfg, "FIFO:len", -1); /** RT SEND server IP, port */ sprintf(rt_ipSend, cfg_getstring(cfg, "RT:sendIp", NULL)); rt_portSend = (unsigned int)cfg_getint(cfg, "RT:sendPort", -1); /** RT RECV server IP, port */ sprintf(rt_ipRecv, cfg_getstring(cfg, "RT:recvIp", NULL)); rt_portRecv = (unsigned int)cfg_getint(cfg, "RT:recvPort", -1); /** LOGGER server IP, port, максимальное количество строк */ sprintf(logSend_ip, cfg_getstring(cfg, "LOGGER:sendIp", NULL)); logSend_port = (unsigned int)cfg_getint(cfg, "LOGGER:sendPort", -1); logMaxLines = (unsigned int)cfg_getint(cfg, "LOGGER:maxLines", -1); /** SNMP */ snmp_n = cfg_getint(cfg, "SNMP:n", -1); /** Адрес УСО */ snmp_uso = cfg_getint(cfg, "SNMP:uso", -1); if (snmp_n > 0 && snmp_n <= SNMP_IP_MAX) for (i=0; i<snmp_n; i++) { sprintf(key, "SNMP:%01d", i+1); snmpSrv_targ.ip[i] = malloc(sizeof(char) * 16); tempip = cfg_getstring(cfg, key, NULL); memcpy(*(snmpSrv_targ.ip+i), tempip, strlen(tempip)+1); } /** Загрузка параметров серийного порта */ /** 0: none, 1: odd, 2: even, 3: space, 4: mark */ rs_parity = cfg_getint(cfg, "RS:prmParity", -1); /** 5 .. 8 */ rs_databits = cfg_getint(cfg, "RS:prmDatabits", -1); /** 1, 2 */ rs_stopbit = cfg_getint(cfg, "RS:prmStopbit", -1); /** Скорость канала RS485 */ rs_speed = cfg_getint(cfg, "RS:speed", -1); /** Длительность одного бита (в микросекундах) вычисляется по формуле: T= 1000000 / V, где V - скорость передачи в бодах. Например, для скорости 19200 бод длительность одного бита составляет 1000000/19200= 52 мкс. */ /** коэффициент для задержки на время передачи по серийному каналу */ utxdel = 1000000 / rs_speed * 10; /** Главная подсистема ЛС 'General' */ sprintf(ls_gen, cfg_getstring(cfg, "LS:gen", NULL)); cdDest = mfnv1a(ls_gen); /** Разрешение на выдачу данных 'AccessGranted' */ sprintf(req_ag, cfg_getstring(cfg, "REQ:ag", NULL)); cdaId = mfnv1a(req_ag); /** Состояние сети RS485 */ sprintf(req_ns, cfg_getstring(cfg, "REQ:ns", NULL)); cdnsId = mfnv1a(req_ns); /** Запрос лога */ sprintf(req_gl, cfg_getstring(cfg, "REQ:gl", NULL)); cdquLogId = mfnv1a(req_gl); /** Состояние магистрали */ sprintf(req_ms, cfg_getstring(cfg, "REQ:ms", NULL)); cdmsId = mfnv1a(req_ms); /** Установка параметров и открытие порта 1 RS485 */ ch1_targ.port = cfg_getint(cfg, "RS485_1:port", -1) - 1; ch1_targ.src = cfg_getint(cfg, "RS485_1:adr", -1); ch1_targ.dst_beg = cfg_getint(cfg, "RS485_1:dstBeg", -1); ch1_targ.dst_end = cfg_getint(cfg, "RS485_1:dstEnd", -1); ch1_enable = cfg_getint(cfg, "RS485_1:enable", -1); if (ch1_enable) { SerialSetParam(ch1_targ.port, rs_parity, rs_databits, rs_stopbit); SerialOpen(ch1_targ.port); SerialSetSpeed(ch1_targ.port, rs_speed); printf("Open port%d, speed= %d\n", ch1_targ.port+1, rs_speed); } else printf("Port1 disabled\n"); /** Установка параметров и открытие порта 2 RS485 */ ch2_targ.port = cfg_getint(cfg, "RS485_2:port", -1) - 1; ch2_targ.src = cfg_getint(cfg, "RS485_2:adr", -1); ch2_targ.dst_beg = cfg_getint(cfg, "RS485_2:dstBeg", -1); ch2_targ.dst_end = cfg_getint(cfg, "RS485_2:dstEnd", -1); ch2_enable = cfg_getint(cfg, "RS485_2:enable", -1); if (ch2_enable) { SerialSetParam(ch2_targ.port, rs_parity, rs_databits, rs_stopbit); SerialOpen(ch2_targ.port); SerialSetSpeed(ch2_targ.port, rs_speed); printf("Open port%d, speed2= %d\n", ch2_targ.port+1, rs_speed); } else printf("Port2 disabled\n"); cfg_free(cfg); /** Выделение памяти под буфер для глобальной таблицы * маршрутов загружаемой с контроллера master */ rtBuf = (unsigned char *)malloc(BO_MAX_TAB_BUF); if(rtBuf == NULL) { bo_log("main() ERROR %s", "can't alloc mem for rtBuf"); return 1; } bo_log("Init ok"); printf("Init ok\n"); if (bo_init_fifo_out(10) == -1) { bo_log("bo_init_fifo_out() ERROR"); return 1; } /** Установка атрибутов функционирования нитей PTHREAD: * - инициализирует структуру, указываемую pattr, значениями "по умолчанию"; * - область действия конкуренции (scope) определяет связность * потока с LWP; * - отсоединенность (detachstate); * - область действия блокировки PTHREAD_PROCESS_PRIVATE. */ pthread_attr_init(&pattr); pthread_attr_setscope(&pattr, PTHREAD_SCOPE_SYSTEM); pthread_attr_setdetachstate(&pattr, PTHREAD_CREATE_JOINABLE); pthread_mutex_init(&mx_psv, NULL); pthread_mutex_init(&mx_actFIFO, NULL); pthread_mutex_init(&mx_rtl, NULL); pthread_mutex_init(&mx_rtg, NULL); pthread_mutex_init(&mx_sendSocket, NULL); init_thrState(&psvdata_ready); init_thrState(&psvAnsdata_ready); init_thrState(&actFIFOdata_ready); init_thrRxBuf(&rxBuf); init_thrTxBuf(&txBuf); init_thrDstBuf(&dstBuf); init_thrRxBuf(&rx2Buf); init_thrTxBuf(&tx2Buf); init_thrDstBuf(&dst2Buf); /** Инициализация условных переменных с выделением памяти */ pthread_cond_init(&psvdata, NULL); pthread_cond_init(&psvAnsdata, NULL); pthread_cond_init(&actFIFOdata, NULL); /** Таблицы маршрутов */ rtl = ht_new(0); /** собственный узел */ rtg = ht_new(0); /** внешние узлы */ rtSend_sock = 0; rtRecv_sock = 0; logSend_sock = 0; fifo_idx = 0; log_targ.logSend_ip = logSend_ip; log_targ.logSend_port = logSend_port; result = pthread_create(&thread_log, &pattr, &logSendSock_connect, &log_targ); if (result) { printf("th_log: result = %d: %s\n", result, strerror(errno)); return 1; } rtRecv_targ.ip = rt_ipRecv; rtRecv_targ.port = rt_portRecv; rtRecv_targ.host_ip = ip; result = pthread_create(&thread_rtRecv, &pattr, &rtbl_recv, &rtRecv_targ); if (result) { printf("th_rtRecv: result = %d: %s\n", result, strerror(errno)); return 1; } rtSend_targ.ip = rt_ipSend; rtSend_targ.port = rt_portSend; rtSend_targ.host_ip = ip; result = pthread_create(&thread_rtSend, &pattr, &rtbl_send, &rtSend_targ); if (result) { printf("th_rtSend: result = %d: %s\n", result, strerror(errno)); return 1; } if (snmp_n > 0 && snmp_n <= SNMP_IP_MAX) { snmpSrv_targ.n = snmp_n; printf("ip=%s, n=%d\n", (snmpSrv_targ.ip[0]), snmpSrv_targ.n); result = pthread_create(&thread_snmpSrv, &pattr, &snmp_serv, &snmpSrv_targ); if (result) { printf("th_snmpSrv: result = %d: %s\n", result, strerror(errno)); return 1; } printf("snmp start ok\n"); } fifoSrv_targ.port = fifo_port; result = pthread_create(&thread_fifoSrv, &pattr, &fifo_serv, &fifoSrv_targ); if (result) { printf("th_fifoSrv: result = %d: %s\n", result, strerror(errno)); return 1; } write(1, "fifo start ok\n", 14); sendfifo_targ.port = fifo_port; result = pthread_create(&thread_sendfifo, &pattr, &send_fifo, &sendfifo_targ); if (result) { printf("th_sendfifo: result = %d: %s\n", result, strerror(errno)); return 1; } write(1, "send_fifo start ok\n", 14); ch1_targ.ch1_enable = ch1_enable; ch1_targ.ch2_enable = ch2_enable; ch1_targ.tscan = tscan; ch1_targ.tout = tout; ch1_targ.utxdel = utxdel; ch1_targ.wdt_en = wdt_en; ch1_targ.nretries = nretries; ch1_targ.ip = ip; ch1_targ.fifo_port = fifo_port; ch1_targ.snmp_n = snmp_n; ch1_targ.snmp_uso = snmp_uso; ch1_targ.logMaxLines = logMaxLines; ch1_targ.cdDest = cdDest; ch1_targ.cdaId = cdaId; ch1_targ.cdnsId = cdnsId; ch1_targ.cdquLogId = cdquLogId; ch1_targ.cdmsId = cdmsId; result = pthread_create(&thread_ch1, &pattr, &chan1, &ch1_targ); if (result) { printf("th_ch1: result = %d: %s\n", result, strerror(errno)); return 1; } write(1, "ch1 start ok\n", 13); ch2_targ.ch1_enable = ch1_enable; ch2_targ.ch2_enable = ch2_enable; ch2_targ.tscan = tscan; ch2_targ.tout = tout; ch2_targ.utxdel = utxdel; ch2_targ.wdt_en = wdt_en; ch2_targ.nretries = nretries; ch2_targ.ip = ip; ch2_targ.fifo_port = fifo_port; ch2_targ.snmp_n = snmp_n; ch2_targ.snmp_uso = snmp_uso; ch2_targ.logMaxLines = logMaxLines; ch2_targ.cdDest = cdDest; ch2_targ.cdaId = cdaId; ch2_targ.cdnsId = cdnsId; ch2_targ.cdquLogId = cdquLogId; ch2_targ.cdmsId = cdmsId; result = pthread_create(&thread_ch2, &pattr, &chan2, &ch2_targ); if (result) { printf("th_ch2: result = %d: %s\n", result, strerror(errno)); return 1; } write(1, "ch2 start ok\n", 13); #if defined (__MOXA_TARGET__) && defined (__WDT__) if (wdt_en) { /* set watch dog timer, must be refreshed in 5ms..60s */ wdt_fd = mxwdg_open(wdt_tm); if (wdt_fd < 0) { printf("fail to open the watch dog !: %d [%s]\n", wdt_fd, strerror(errno)); return 1; } init_thrWdtlife(&wdt_life); printf("WatchDog enabled ok\n"); } #endif wdt_targ.wdt_en = wdt_en; wdt_targ.lifeFile = lifeFile; result = pthread_create(&thread_wdt, &pattr, &wdt, &wdt_targ); if (result) { printf("th_wdt: result = %d: %s\n", result, strerror(errno)); return 1; } /** Ожидаем завершения потоков */ if (!pthread_equal(pthread_self(), thread_log)) pthread_join(thread_log, NULL); if (!pthread_equal(pthread_self(), thread_rtRecv)) pthread_join(thread_rtRecv, NULL); if (!pthread_equal(pthread_self(), thread_rtSend)) pthread_join(thread_rtSend, NULL); if (snmp_n > 0 && snmp_n <= SNMP_IP_MAX) if (!pthread_equal(pthread_self(), thread_snmpSrv)) pthread_join(thread_snmpSrv, NULL); if (!pthread_equal(pthread_self(), thread_fifoSrv)) pthread_join(thread_fifoSrv, NULL); if (!pthread_equal(pthread_self(), thread_sendfifo)) pthread_join(thread_sendfifo, NULL); if (!pthread_equal(pthread_self(), thread_ch1)) pthread_join(thread_ch1, NULL); if (!pthread_equal(pthread_self(), thread_ch2)) pthread_join(thread_ch2, NULL); if (!pthread_equal(pthread_self(), thread_wdt)) pthread_join(thread_wdt, NULL); /** Разрушаем блокировки и условные переменные, освобождаем память. */ pthread_mutex_destroy(&mx_psv); pthread_mutex_destroy(&mx_actFIFO); pthread_mutex_destroy(&mx_rtl); pthread_mutex_destroy(&mx_rtg); pthread_mutex_destroy(&mx_sendSocket); destroy_thrRxBuf(&rxBuf); destroy_thrTxBuf(&txBuf); destroy_thrDstBuf(&dstBuf); destroy_thrRxBuf(&rx2Buf); destroy_thrTxBuf(&tx2Buf); destroy_thrDstBuf(&dst2Buf); pthread_cond_destroy(&psvdata); pthread_cond_destroy(&psvAnsdata); pthread_cond_destroy(&actFIFOdata); destroy_thrState(&psvdata_ready); destroy_thrState(&psvAnsdata_ready); destroy_thrState(&actFIFOdata_ready); #if defined (__MOXA_TARGET__) && defined (__WDT__) if (wdt_en) { destroy_thrWdtlife(&wdt_life); mxwdg_close(wdt_fd); } #endif if(rtBuf != NULL) free(rtBuf); rt_free(rtl); rt_free(rtg); return 0; }
/* Entry-point. Has same semantics as main(). */ static int vifm_main(int argc, char *argv[]) { /* TODO: refactor vifm_main() function */ static const int quit = 0; char **files = NULL; int nfiles = 0; int lwin_cv, rwin_cv; char dir[PATH_MAX + 1]; if(get_start_cwd(dir, sizeof(dir)) != 0) { return -1; } args_parse(&vifm_args, argc, argv, dir); args_process(&vifm_args, 1); lwin_cv = (strcmp(vifm_args.lwin_path, "-") == 0 && vifm_args.lwin_handle); rwin_cv = (strcmp(vifm_args.rwin_path, "-") == 0 && vifm_args.rwin_handle); if(lwin_cv || rwin_cv) { files = read_stream_lines(stdin, &nfiles, 1, NULL, NULL); if(reopen_term_stdin() != 0) { free_string_array(files, nfiles); return EXIT_FAILURE; } } (void)setlocale(LC_ALL, ""); srand(time(NULL)); cfg_init(); if(vifm_args.logging) { init_logger(1, vifm_args.startup_log_path); } init_filelists(); tabs_init(); regs_init(); cfg_discover_paths(); reinit_logger(cfg.log_file); /* Commands module also initializes bracket notation and variables. */ init_commands(); init_builtin_functions(); update_path_env(1); if(stats_init(&cfg) != 0) { free_string_array(files, nfiles); puts("Error during session status initialization."); return -1; } /* Tell file type module what function to use to check availability of * external programs. */ ft_init(&external_command_exists); /* This should be called before loading any configuration file. */ ft_reset(curr_stats.exec_env_type == EET_EMULATOR_WITH_X); init_option_handlers(); if(!vifm_args.no_configs) { /* vifminfo must be processed this early so that it can restore last visited * directory. */ read_info_file(0); } curr_stats.ipc = ipc_init(vifm_args.server_name, &parse_received_arguments, &eval_received_expression); if(ipc_enabled() && curr_stats.ipc == NULL) { fputs("Failed to initialize IPC unit", stderr); return -1; } /* Export chosen server name to parsing unit. */ { var_t var = var_from_str(ipc_get_name(curr_stats.ipc)); setvar("v:servername", var); var_free(var); } args_process(&vifm_args, 0); bg_init(); fops_init(&enter_prompt_mode, &prompt_msg_custom); set_view_path(&lwin, vifm_args.lwin_path); set_view_path(&rwin, vifm_args.rwin_path); if(need_to_switch_active_pane(vifm_args.lwin_path, vifm_args.rwin_path)) { swap_view_roles(); } load_initial_directory(&lwin, dir); load_initial_directory(&rwin, dir); /* Force split view when two paths are specified on command-line. */ if(vifm_args.lwin_path[0] != '\0' && vifm_args.rwin_path[0] != '\0') { curr_stats.number_of_windows = 2; } /* Prepare terminal for further operations. */ curr_stats.original_stdout = reopen_term_stdout(); if(curr_stats.original_stdout == NULL) { free_string_array(files, nfiles); return -1; } if(!setup_ncurses_interface()) { free_string_array(files, nfiles); return -1; } init_modes(); un_init(&undo_perform_func, NULL, &ui_cancellation_requested, &cfg.undo_levels); load_view_options(curr_view); curr_stats.load_stage = 1; /* Make v:count exist during processing configuration. */ set_count_vars(0); if(!vifm_args.no_configs) { load_scheme(); cfg_load(); } if(lwin_cv || rwin_cv) { flist_custom_set(lwin_cv ? &lwin : &rwin, "-", dir, files, nfiles); } free_string_array(files, nfiles); cs_load_pairs(); cs_write(); setup_signals(); /* Ensure trash directories exist, it might not have been called during * configuration file sourcing if there is no `set trashdir=...` command. */ (void)set_trash_dir(cfg.trash_dir); check_path_for_file(&lwin, vifm_args.lwin_path, vifm_args.lwin_handle); check_path_for_file(&rwin, vifm_args.rwin_path, vifm_args.rwin_handle); curr_stats.load_stage = 2; /* Update histories of the views to ensure that their current directories, * which might have been set using command-line parameters, are stored in the * history. This is not done automatically as history manipulation should be * postponed until views are fully loaded, otherwise there is no correct * information about current file and relative cursor position. */ flist_hist_save(&lwin, NULL, NULL, -1); flist_hist_save(&rwin, NULL, NULL, -1); /* Trigger auto-commands for initial directories. */ if(!lwin_cv) { (void)vifm_chdir(flist_get_dir(&lwin)); vle_aucmd_execute("DirEnter", flist_get_dir(&lwin), &lwin); } if(!rwin_cv) { (void)vifm_chdir(flist_get_dir(&rwin)); vle_aucmd_execute("DirEnter", flist_get_dir(&rwin), &rwin); } update_screen(UT_FULL); modes_update(); /* Run startup commands after loading file lists into views, so that commands * like +1 work. */ exec_startup_commands(&vifm_args); curr_stats.load_stage = 3; event_loop(&quit); return 0; }
void vifm_restart(void) { view_t *tmp_view; curr_stats.restart_in_progress = 1; /* All user mappings in all modes. */ vle_keys_user_clear(); /* User defined commands. */ vle_cmds_run("comclear"); /* Autocommands. */ vle_aucmd_remove(NULL, NULL); /* All kinds of histories. */ cfg_resize_histories(0); /* Session status. Must be reset _before_ options, because options take some * of values from status. */ (void)stats_reset(&cfg); /* Options of current pane. */ vle_opts_restore_defaults(); /* Options of other pane. */ tmp_view = curr_view; curr_view = other_view; load_view_options(other_view); vle_opts_restore_defaults(); curr_view = tmp_view; /* File types and viewers. */ ft_reset(curr_stats.exec_env_type == EET_EMULATOR_WITH_X); /* Undo list. */ un_reset(); /* Directory stack. */ dir_stack_clear(); /* Registers. */ regs_reset(); /* Clear all marks and bookmarks. */ clear_all_marks(); bmarks_clear(); /* Reset variables. */ clear_envvars(); init_variables(); /* This update is needed as clear_variables() will reset $PATH. */ update_path_env(1); reset_views(); read_info_file(1); flist_hist_save(&lwin, NULL, NULL, -1); flist_hist_save(&rwin, NULL, NULL, -1); /* Color schemes. */ if(stroscmp(curr_stats.color_scheme, DEF_CS_NAME) != 0 && cs_exists(curr_stats.color_scheme)) { cs_load_primary(curr_stats.color_scheme); } else { cs_load_defaults(); } cs_load_pairs(); cfg_load(); /* Reloading of tabs needs to happen after configuration is read so that new * values from lwin and rwin got propagated. */ tabs_reload(); exec_startup_commands(&vifm_args); curr_stats.restart_in_progress = 0; /* Trigger auto-commands for initial directories. */ (void)vifm_chdir(flist_get_dir(&lwin)); vle_aucmd_execute("DirEnter", flist_get_dir(&lwin), &lwin); (void)vifm_chdir(flist_get_dir(&rwin)); vle_aucmd_execute("DirEnter", flist_get_dir(&rwin), &rwin); update_screen(UT_REDRAW); }
int main(int argc, char *argv[]) { /* TODO: refactor main() function */ static const int quit = 0; char dir[PATH_MAX]; char **files = NULL; int nfiles = 0; if(get_cwd(dir, sizeof(dir)) == NULL) { perror("getcwd"); return -1; } (void)vifm_chdir(dir); args_parse(&vifm_args, argc, argv, dir); args_process(&vifm_args, 1); if(strcmp(vifm_args.lwin_path, "-") == 0 || strcmp(vifm_args.rwin_path, "-") == 0) { files = read_stream_lines(stdin, &nfiles, 1, NULL, NULL); if(reopen_term_stdin() != 0) { return EXIT_FAILURE; } } (void)setlocale(LC_ALL, ""); srand(time(NULL)); cfg_init(); if(vifm_args.logging) { init_logger(1, vifm_args.startup_log_path); } init_filelists(); regs_init(); cfg_discover_paths(); reinit_logger(cfg.log_file); /* Commands module also initializes bracket notation and variables. */ init_commands(); init_builtin_functions(); update_path_env(1); if(init_status(&cfg) != 0) { puts("Error during session status initialization."); return -1; } /* Tell file type module what function to use to check availability of * external programs. */ ft_init(&external_command_exists); /* This should be called before loading any configuration file. */ ft_reset(curr_stats.exec_env_type == EET_EMULATOR_WITH_X); init_option_handlers(); if(!vifm_args.no_configs) { /* vifminfo must be processed this early so that it can restore last visited * directory. */ read_info_file(0); } ipc_init(vifm_args.server_name, &parse_received_arguments); /* Export chosen server name to parsing unit. */ { var_val_t value = { .string = (char *)ipc_get_name() }; var_t var = var_new(VTYPE_STRING, value); setvar("v:servername", var); var_free(var); } args_process(&vifm_args, 0); bg_init(); fops_init(&enter_prompt_mode, &prompt_msg_custom); set_view_path(&lwin, vifm_args.lwin_path); set_view_path(&rwin, vifm_args.rwin_path); if(need_to_switch_active_pane(vifm_args.lwin_path, vifm_args.rwin_path)) { swap_view_roles(); } load_initial_directory(&lwin, dir); load_initial_directory(&rwin, dir); /* Force split view when two paths are specified on command-line. */ if(vifm_args.lwin_path[0] != '\0' && vifm_args.rwin_path[0] != '\0') { curr_stats.number_of_windows = 2; } /* Prepare terminal for further operations. */ curr_stats.original_stdout = reopen_term_stdout(); if(curr_stats.original_stdout == NULL) { return -1; } if(!setup_ncurses_interface()) { return -1; } { const colmgr_conf_t colmgr_conf = { .max_color_pairs = COLOR_PAIRS, .max_colors = COLORS, .init_pair = &init_pair, .pair_content = &pair_content, .pair_in_use = &pair_in_use, .move_pair = &move_pair, }; colmgr_init(&colmgr_conf); } init_modes(); init_undo_list(&undo_perform_func, NULL, &ui_cancellation_requested, &cfg.undo_levels); load_view_options(curr_view); curr_stats.load_stage = 1; if(!vifm_args.no_configs) { load_scheme(); cfg_load(); if(strcmp(vifm_args.lwin_path, "-") == 0) { flist_custom_set(&lwin, "-", dir, files, nfiles); } else if(strcmp(vifm_args.rwin_path, "-") == 0) { flist_custom_set(&rwin, "-", dir, files, nfiles); } } /* Load colors in any case to load color pairs. */ cs_load_pairs(); cs_write(); setup_signals(); /* Ensure trash directories exist, it might not have been called during * configuration file sourcing if there is no `set trashdir=...` command. */ (void)set_trash_dir(cfg.trash_dir); check_path_for_file(&lwin, vifm_args.lwin_path, vifm_args.lwin_handle); check_path_for_file(&rwin, vifm_args.rwin_path, vifm_args.rwin_handle); curr_stats.load_stage = 2; /* Update histories of the views to ensure that their current directories, * which might have been set using command-line parameters, are stored in the * history. This is not done automatically as history manipulation should be * postponed until views are fully loaded, otherwise there is no correct * information about current file and relative cursor position. */ flist_hist_save(&lwin, NULL, NULL, -1); flist_hist_save(&rwin, NULL, NULL, -1); /* Trigger auto-commands for initial directories. */ vle_aucmd_execute("DirEnter", lwin.curr_dir, &lwin); vle_aucmd_execute("DirEnter", rwin.curr_dir, &rwin); update_screen(UT_FULL); modes_update(); /* Run startup commands after loading file lists into views, so that commands * like +1 work. */ exec_startup_commands(&vifm_args); curr_stats.load_stage = 3; event_loop(&quit); return 0; } /* Checks whether pair is being used at the moment. Returns non-zero if so and * zero otherwise. */ static int pair_in_use(short int pair) { int i; for(i = 0; i < MAXNUM_COLOR; ++i) { if(cfg.cs.pair[i] == pair || lwin.cs.pair[i] == pair || rwin.cs.pair[i] == pair) { return 1; } } return 0; }