[GRASS5] ANSIfication of GRASS 6.1-CVS functions
Markus Neteler
neteler at itc.it
Tue Jan 3 01:40:25 EST 2006
On Mon, Jan 02, 2006 at 05:35:40PM +0000, Glynn Clements wrote:
>
> Markus Neteler wrote:
>
> > I have submitting updated function declarations
> > to CVS to migrate old K&R style to ANSI style. About
> > 800 functions in 230 files are affected.
> >
> > This work was only possible thanks to the efforts
> > of Prof Giulio Antoniol (École Polytechnique, Montreal,
> > Canada) who analyzed the 6.1-CVS code and wrote a PERL
> > script for me/us to auto-convert the function
> > declarations.
>
> Is there a problem with the "protoize" utility (from gcc)?
I tried a while but didn't get it working and didn't
find instructions online which I managed to understand.
So I asked Giulio Antoniol, and he helped out.
> > I am submitting things only after inspection.
> > The list of changes (CVS diffs) is available at:
> > http://grass.itc.it/pipermail/grass-commit/2006-January/date.html#end
> >
> > My gcc flags for compilation are (pretty restrictive):
> > MYCFLAGS="-g -Wall -Werror-implicit-function-declaration -fno-common"
> > MYCXXFLAGS="-g -Wall"
> > CFLAGS="$MYCFLAGS" CXXFLAGS="$MYCXXFLAGS" ./configure ...
> >
> > A few doubts I have which I would like to discuss here
> > before submitting:
> >
> > ####################
> > I fixed (hopefully correctly) the 'wext()' definition
> > and calls in
> >
> > lib/cdhc/as181.c
>
> Note that, for function arguments, there is no semantic difference
> between "double x[]" and "double *x".
>
> Personally, I always use the latter as what is being passed is a
> pointer, but some people like to use the different syntaxes to
> indicate whether the pointer points to a single value (*x) or to
> multiple values (x[]).
So far we preserved what was there. It is debatable to
make another round to get this updated as well.
> > ####################
> > Then a conflict in lib/gis/:
> >
> > definition in gisdefs.h:
> >
> > /* index.c */
> > char *G_index(char *, int);
> > char *G_rindex(char *, int);
> >
> > definition in index.c:
> >
> > char *
> > G_index (register char *str, register char delim)
> >
> > char *
> > G_rindex (register char *str, register char delim)
>
> Using "register" in argument lists is meaningless. Whether or not a
> register is used is determined by the calling convention.
>
> Linux/x86/gcc uses the stack by default; you can force the use of a
> register using the "regparm" attribute, but that's seldom a good idea.
>
> For local variables, it's almost always preferable to let the compiler
> figure out when to use a register (and most modern compilers will just
> ignore "register" specifiers).
This is the patch which I applied, hope that's right:
Index: index.c
===================================================================
RCS /grassrepository/grass6/lib/gis/index.c,v
retrieving revision 2.0
diff -u -r2.0 index.c
--- index.c 9 Nov 2004 12:18:38 -0000 2.0
+++ index.c 3 Jan 2006 06:32:53 -0000
@@ -1,3 +1,5 @@
+/* TODO: should this go into strings.c ? */
+
#include "gis.h"
@@ -12,8 +14,8 @@
*/
char *
-G_index (str, delim)
- register char *str, delim;
+G_index (char *str, int delim)
+
{
while (*str && *str != delim)
str++;
@@ -34,10 +36,10 @@
*/
char *
-G_rindex (str, delim)
- register char *str, delim;
+G_rindex (char *str, int delim)
+
{
- register char *p;
+ char *p;
p = NULL;
while (*str)
> > ####################
> > another one in lib/gis
> >
> > /* unctrl.c */
> > char *G_unctrl(int);
> >
> > definition in unctrl.c
> > char *G_unctrl(unsigned char c);
>
> Change the implementation to match the declaration in gisdefs.h. The
> K&R version will expect an int to have been passed, as that's the
> smallest integral type that K&R allows.
Here's the patch which I applied:
Index: unctrl.c
===================================================================
RCS /grassrepository/grass6/lib/gis/unctrl.c,v
retrieving revision 2.0
diff -u -r2.0 unctrl.c
--- unctrl.c 9 Nov 2004 12:22:58 -0000 2.0
+++ unctrl.c 3 Jan 2006 06:32:53 -0000
@@ -9,13 +9,13 @@
* represented by ctrl-C, e.g., control A is represented by ctrl-A. 0177 is
* represented by DEL/RUB. Normal characters remain unchanged.
*
- * \param c
+ * \param int c
* \return char *
*/
char *
-G_unctrl(c)
- unsigned char c;
+G_unctrl (int c)
+
{
static char buf[20];
> > ####################
> > imagery/open.c
> >
> > static error (char *group, char *file, char *msga, char *msgb)
> >
> > The compiler complains about absent return type:
> > open.c:12: warning: return type defaults to `int'
> > open.c: In function `error':
> > open.c:17: warning: control reaches end of non-void function
>
> Change it to "static void error(...)".
done.
> > ####################
> > Unrelated, I found that by chance:
> >
> > bartok:gis[6941.292] grep 'floor()\|ceil()' *
> > align_window.c: double floor(), ceil();
> > color_range.c: double floor(), ceil();
> >
> > I guess that it is no good idea to have it
> > defined, right?
>
> Use "#include <math.h>" to get the prototypes.
Done as well.
Thanks, Glynn, for the explanations.
Markus
More information about the grass-dev
mailing list