On Tue, Nov 11, 2014 at 18:13:53 +0000, Rory McNamara wrote: > I've probably used format-patch wrong, but there are three commits there. The > new bit is at the bottom. > I've rebased, and the whole patch is now attached.
Ah, I see now, sorry about that. Easier to see the changes now anyways. Comments inline. --Ben > From 4d9b77a0443d49da4fc35a9c2543af9465d2e3ac Mon Sep 17 00:00:00 2001 > From: PsychoMario <[email protected]> > Date: Tue, 11 Nov 2014 13:05:15 +0000 > Subject: [PATCH] added least unambiguous to find_command > > added least unambiguous info to manpage > > disallow overlength but matching commands > --- > doc/mpc.1 | 1 + > src/main.c | 12 +++++++++++- > 2 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/doc/mpc.1 b/doc/mpc.1 > index 2bea9a6..b119c81 100644 > --- a/doc/mpc.1 > +++ b/doc/mpc.1 > @@ -96,6 +96,7 @@ If you specify an absolute path, mpc attempts a connection > via Unix Domain Socke > The port to connect to; if not given, the value of the environment variable > MPD_PORT is checked before defaulting to 6600. This default can be changed > at compile-time. > .br > .SH COMMANDS > +Commands can be used from the least unambiguous prefix (e.g insert or ins) > .TP > .B add <file> > Adds a song from the music database to the playlist. Can also read input > from pipes. Use "mpc ls | mpc add" to add all files to the playlist. > diff --git a/src/main.c b/src/main.c > index 7c30ff6..91b4e86 100644 > --- a/src/main.c > +++ b/src/main.c > @@ -214,8 +214,18 @@ setup_connection(void) > static struct command * > find_command(const char *name) > { > + int matches, len = 0; > + do { > + matches = 0; > + len += 1; > + for (unsigned i = 0; mpc_table[i].command != NULL; ++i) > + if (strncmp(name, mpc_table[i].command, len) == 0) > + matches += 1; > + } while (matches > 1); This loop is excessive. Why not just do a single loop over all the commands with len = strlen(name) since there's a restriction below? In fact, a single loop with a local struct command * which saves any matches and then do: return (matches == 1) ? cmd : NULL; > + if (matches == 0) > + return NULL; > for (unsigned i = 0; mpc_table[i].command != NULL; ++i) > - if (strcmp(name, mpc_table[i].command) == 0) > + if (strncmp(name, mpc_table[i].command, len) == 0 && > strncmp(name, mpc_table[i].command, strlen(name)) == 0) > return &mpc_table[i]; > > return NULL; > -- > 2.1.2 > _______________________________________________ mpd-devel mailing list [email protected] http://mailman.blarg.de/listinfo/mpd-devel
