[GRASS-dev] db.execute: ".execute" suffix missing in man page

Paul Kelly paul-grass at stjohnspoint.co.uk
Wed Oct 24 10:28:58 EDT 2007


On Wed, 10 Oct 2007, Glynn Clements wrote:

> Maciej Sieczka wrote:
>
>> In Firefox and Lynx browsers the ".execute" part of
>> "db.execute" is missing above the module description. It
>> also not there in "man db.execute" output.
>
[...]
> G_parser() does:
>
> 	G_basename(tmp_name, "exe");

Oops - that was an oversight on my part.

>
> G_basename() is described thus:
>
> * \fn char * G_basename (char *filename, const char *desired_ext)
> *
> * \brief Truncates filename to the base part (before the last '.')
> * if it matches the extension, otherwise leaves it unchanged.
>
> But it actually only checks if the specified extension is a prefix of
> the actual extension rather than a complete match.

The reason for that was so that e.g. "tif" can match .tif and .tiff and 
other usage cases like that. The original usage for G_basename() was 
checking the output filename for r.out.tiff so it could decide if it 
should add an extension or not.

> Suggested fix (untested):
>
> char * G_basename(char *filename, const char *desired_ext)
> {
>    /* Find the last . in the filename */
>    char *dot = strrchr(filename, '.');
>
>    if (dot && G_strcasecmp(dot + 1, desired_ext) == 0)
>       *dot = '\0';
>
>    return filename;
> }

That would break the way it is used in r.out.tiff in some circumstances. 
I'm thinking it might be easier to conditionalise its use in G_parser() 
and G_set_program_name() on __MINGW32__ as its only purpose there is to 
strip out the .exe executable extension on Windows?

Maybe there should be two functions though. Or maybe stripping out the 
.exe is quite simple and it doesn't need to use G_basename()?

If noone else has fixed this yet I'll try and get to it fairly soon.

Paul




More information about the grass-dev mailing list