[PATCH] Choose syntax

Roland Illig roland.illig at gmx.de
Tue Jul 12 06:41:47 UTC 2005


Leonard den Ottolander wrote:
> Hi Roland,
> 
> On Mon, 2005-07-11 at 08:33, Roland Illig wrote:
> 
>>>+exec_syntax_dialog (const char **names) {
>>
>>This function must know the size of the ''names'' buffer. I suggest a 
>>second parameter: size_t names_size.
> 
> 
> The problem is that we don't know the length of names before the
> function finishes. I work around this by always supplying a sufficiently
> large list of MAX_SYNTAX_FILES items. Making the length configurable
> seems not to make much sense. The best approach of course would be to
> dynamically grow the list, but I haven't yet succeeded in doing that.
> IIANM it requires the passing of a char** by reference, ie a char***.
> The code I came up with so far kept segfaulting ;-) .

I think I din't say clear enough what I meant (my fault): 
exec_syntax_dialog should not use the constant MAX_SYNTAX_FILES, but 
some parameter names_size. That makes the relation between them tight 
closer. Similar examples using this style are: g_strlcpy(dest, src, 
destsize), g_snprintf(dest, destsize, ...) and some others.

>>>+	    ! strcmp (names[i], option_syntax_type))
>>
>>don't use !strcmp(...). This function does not return a boolean, but a 
>>"comparison result", which should be checked using the relational 
>>operators (==, <=, >=, <, >).
> 
> I know. But as I am only interested in equality of strings ('==' returns
> 0, !'==' 1) strcmp suffices for what I want to do.

I meant: _use_ strcmp, but don't use boolean operators with it. That is:

	if (strcmp (names[i], option_syntax_type) == 0) ...

Don't ever use boolean operators if you don't intend them to _mean_ 
logic manipulation.

In HEAD, I placed a nice macro into src/util.h:

/* usage: str_cmp ("foo", !=, "bar") */
#define str_cmp(a,rel,b) (strcmp ((a), (b)) rel 0)

To me it looks quite good, although it does not follow the usual C syntax.

>>>@@ -272,6 +272,13 @@ menu_options (void)
>>> {
>>>     edit_options_dialog ();
>>> }
>>>+
>>>+static void
>>>+menu_syntax (void)
>>>+{
>>>+    syntax_dialog ();
>>>+}
>>>+
>>
>>Why this extra function?
> 
> 
> Again following common practice of wrapping menu functions before
> calling the actual dialog function.

cvs diff -r1.19 -r1.20 edit/editmenu.c

It's like I expected it. That was not "common practice" but superfluous 
from the beginning, hidden inside a whole bunch of functions where the 
wrapper was actually necessary. But not in that one case. So both 
unnecessary wrappers (menu_options and menu_syntax) should be removed.

Roland



More information about the mc-devel mailing list