int cmd_disable(mpd_unused int argc, char **argv, mpd_Connection *conn) { int arg; if( ! parse_int( argv[0], &arg ) || arg <= 0 ) { DIE( "Not a positive integer\n" ); } else { mpd_sendDisableOutputCommand( conn, ( arg - 1 ) ); } mpd_finishCommand( conn ); return cmd_outputs(0, NULL, conn); }
static int enable_disable(int argc, char **argv, struct mpd_connection *conn, bool (*matched)(struct mpd_connection *conn, unsigned id), bool (*not_matched)(struct mpd_connection *conn, unsigned id)) { char **names = argv, **names_end = argv; bool only = false; if (not_matched != NULL && !strcmp(argv[0], "only")) { only = true; ++argv; if (!--argc) { DIE("No outputs specified."); } } unsigned *ids = malloc(argc * sizeof *ids); unsigned *ids_end = ids; for (int i = argc; i; --i, ++argv) { int arg; if (!parse_int(*argv, &arg)) { *names_end = *argv; ++names_end; } else if (arg <= 0) { fprintf(stderr, "%s: not a positive integer\n", *argv); } else { /* We decrement by 1 to make it natural to the user. */ *ids_end++ = arg - 1; } } unsigned max; if (only || names != names_end) { max = match_outputs(conn, names, names_end, &ids_end); } if (ids == ids_end) { goto done; } if (!mpd_command_list_begin(conn, false)) { printErrorAndExit(conn); } if (only) { for (unsigned i = 0; i <= max; ++i) { bool found = false; for (unsigned *id = ids; !found && id != ids_end; ++id) { found = *id == i; } (found ? matched : not_matched)(conn, i); } } else { for (unsigned *id = ids; id != ids_end; ++id) { matched(conn, *id); } } if (!mpd_command_list_end(conn) || !mpd_response_finish(conn)) { printErrorAndExit(conn); } cmd_outputs(0, NULL, conn); done: free(ids); return 0; }