// Deinitialize resources on window unload that were initialized on window load void window_unload(Window *window) { current_app.unload(); layer_remove_child_layers(rootLayer); if (window != NULL) { config_deinit(window); if (window != NULL) window_destroy(window); } }
int main(int argc, char *argv[]) { int status; struct config *config = NULL; status = config_init_from_cmdline(argc, argv, &config); if (status < 0) { return status; } else if (status == 1) { print_test_help(argv[0]); return 0; } else if (status > 0) { fprintf(stderr, "Unexpected return value: %d\n", status); return status; } print_config(config); config_deinit(config); return EXIT_SUCCESS; }
int main(int argc, char **argv) { signal(SIGHUP, sighandler); signal(SIGINT, sighandler); signal(SIGTERM, sighandler); signal(SIGPIPE, SIG_IGN); // Setting default file permissions to o+rw umask(~(S_IRUSR | S_IWUSR)); // Turning off buffering setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); processcommandline(argc, argv); if (!config_init(configfilename)) return 1; daemon_poll_init(); if (!usb_init()) return 2; while (!nai_flags.sigexit) { if (!usb_process()) break; if (!daemon_poll_process()) break; if (!nai_process()) break; } usb_deinit(); daemon_poll_deinit(); config_deinit(); printf("main: exiting.\n"); return 0; }
int config_init_from_cmdline(int argc, char * const argv[], struct config **config_out) { int status = 0; struct config *config = NULL; int c, idx; bool valid; struct stat file_info; config = alloc_config_with_defaults(); if (config == NULL) { pr_dbg("%s: Failed to alloc config.\n", __FUNCTION__); return -2; } while ((c = getopt_long(argc, argv, OPTIONS, long_options, &idx)) != -1) { switch (c) { case OPTION_HELP: status = 1; goto out; case OPTION_DEVICE: if (config->bladerf_dev == NULL) { status = bladerf_open(&config->bladerf_dev, optarg); if (status < 0) { fprintf(stderr, "Failed to open bladeRF=%s: %s\n", optarg, bladerf_strerror(status)); goto out; } } break; case OPTION_OUTPUT: if (config->rx_output == NULL) { if (!strcasecmp(optarg, "stdout")) { config->rx_output = stdout; } else { config->rx_output = fopen(optarg, "wb"); if (config->rx_output == NULL) { status = -errno; fprintf(stderr, "Failed to open %s for writing: %s\n", optarg, strerror(-status)); goto out; } } } break; case OPTION_RXLNA: status = str2lnagain(optarg, &config->params.rx_lna_gain); if (status != 0) { fprintf(stderr, "Invalid RX LNA gain: %s\n", optarg); goto out; } break; case OPTION_RXVGA1: config->params.rx_vga1_gain = str2int(optarg, BLADERF_RXVGA1_GAIN_MIN, BLADERF_RXVGA1_GAIN_MAX, &valid); if (!valid) { status = -1; fprintf(stderr, "Invalid RX VGA1 gain: %s\n", optarg); goto out; } break; case OPTION_RXVGA2: config->params.rx_vga2_gain = str2int(optarg, BLADERF_RXVGA2_GAIN_MIN, BLADERF_RXVGA2_GAIN_MAX, &valid); if (!valid) { status = -1; fprintf(stderr, "Invalid RX VGA2 gain: %s\n", optarg); goto out; } break; case OPTION_RXFREQ: config->params.rx_freq = str2uint_suffix(optarg, BLADERF_FREQUENCY_MIN, BLADERF_FREQUENCY_MAX, freq_suffixes, num_freq_suffixes, &valid); if (!valid) { status = -1; fprintf(stderr, "Invalid RX frequency: %s\n", optarg); goto out; } break; case OPTION_INPUT: if (config->tx_input == NULL) { if (!strcasecmp(optarg, "stdin")) { config->tx_input = stdin; config->tx_filesize = -1; } else { config->tx_input = fopen(optarg, "rb"); if (config->tx_input == NULL) { status = -errno; fprintf(stderr, "Failed to open %s for reading: %s\n", optarg, strerror(-status)); goto out; } //Get file size status = stat(optarg, &file_info); if (status != 0){ fprintf(stderr, "Couldn't filesize of %s: %s\n", optarg, strerror(status)); } config->tx_filesize = file_info.st_size; } } break; case OPTION_TXVGA1: config->params.tx_vga1_gain = str2int(optarg, BLADERF_TXVGA1_GAIN_MIN, BLADERF_TXVGA2_GAIN_MAX, &valid); if (!valid) { status = -1; fprintf(stderr, "Invalid TX VGA1 gain: %s\n", optarg); goto out; } break; case OPTION_TXVGA2: config->params.tx_vga2_gain = str2int(optarg, BLADERF_TXVGA2_GAIN_MIN, BLADERF_TXVGA2_GAIN_MAX, &valid); if (!valid) { status = -1; fprintf(stderr, "Invalid TX VGA2 gain: %s\n", optarg); goto out; } break; case OPTION_TXFREQ: config->params.tx_freq = str2uint_suffix(optarg, BLADERF_FREQUENCY_MIN, BLADERF_FREQUENCY_MAX, freq_suffixes, num_freq_suffixes, &valid); if (!valid) { status = -1; fprintf(stderr, "Invalid TX frequency: %s\n", optarg); goto out; } break; case OPTION_QUIET: config->quiet = true; break; } } /* Initialize any properties not covered by user input */ status = init_remaining_params(config); out: if (status != 0) { config_deinit(config); *config_out = NULL; } else { *config_out = config; } return status; }