int main(int argc, char *argv[]) { const gchar *mode_string; GOptionContext *ctx; gint mode; GError *error = NULL; int result; control_name = get_installation_path_for(PATH_CONTROL_SOCKET); mode_string = get_mode(&argc, &argv); if (!mode_string) { usage(argv[0]); } ctx = NULL; for (mode = 0; modes[mode].mode; mode++) { if (strcmp(modes[mode].mode, mode_string) == 0) { ctx = g_option_context_new(mode_string); #if GLIB_CHECK_VERSION (2, 12, 0) g_option_context_set_summary(ctx, modes[mode].description); #endif g_option_context_add_main_entries(ctx, modes[mode].options, NULL); g_option_context_add_main_entries(ctx, slng_options, NULL); break; } } if (!ctx) { fprintf(stderr, "Unknown command\n"); usage(argv[0]); } if (!g_option_context_parse(ctx, &argc, &argv, &error)) { fprintf(stderr, "Error parsing command line arguments: %s\n", error ? error->message : "Invalid arguments"); g_clear_error(&error); g_option_context_free(ctx); return 1; } g_option_context_free(ctx); control_client = control_client_new(control_name); result = modes[mode].main(argc, argv, modes[mode].mode); control_client_free(control_client); return result; }
int main(int argc, char *argv[]) { GError *error = NULL; int result; setlocale(LC_ALL, ""); control_name = get_installation_path_for(PATH_CONTROL_SOCKET); if (argc > 1 && _is_help(argv[1])) { print_usage(argv[0], modes); exit(0); } GString *cmdname_accumulator = g_string_new(argv[0]); CommandDescriptor *active_mode = find_active_mode(modes, &argc, argv, cmdname_accumulator); GOptionContext *ctx = setup_help_context(cmdname_accumulator->str, active_mode); g_string_free(cmdname_accumulator, TRUE); if (!ctx) { fprintf(stderr, "Unknown command\n"); print_usage(argv[0], modes); exit(1); } if (!g_option_context_parse(ctx, &argc, &argv, &error)) { fprintf(stderr, "Error parsing command line arguments: %s\n", error ? error->message : "Invalid arguments"); g_clear_error(&error); g_option_context_free(ctx); return 1; } control_client = control_client_new(control_name); result = active_mode->main(argc, argv, active_mode->mode, ctx); g_option_context_free(ctx); control_client_free(control_client); return result; }