[gnutls-dev] RE: constification patch

ZIGLIO, Frediano, VF-IT Frediano.Ziglio at vodafone.com
Wed Dec 28 14:00:03 CET 2005


> 
> "ZIGLIO, Frediano, VF-IT" <Frediano.Ziglio at vodafone.com> writes:
> 
> > This simple patch add some const definition. It also assure 
> that global
> > variables are really const.
> 
> I installed most of the patch.
> 
> The lib/minitasn1/ changes didn't look right, so I didn't install
> them.  First, 'inline' can't be used because libtasn1 is supposed to
> be C89 portable.  Also, isn't it possible to solve this without
> creating new *_const functions?  Moving typecasts into a special
> function just hide the problems.  I think warnings are better here
> because then we know that there is a problem.
> 
> Thanks,
> Simon
> 

Hi Simon,
  I would never expected that you ever apply the patch so fast!

Well, I came from "C++ world" were const is very important but easier to
use than in C however after some year developing OpenSource C
applications I have to say that const is important even on C... The
*_const functions reflect how C++ work... but in C. In C++ you can
declare two functions like

  char *strchr(char *, int);
  const char *strchr(const char *, int);

without problems, in C this give error... so I added _const. The
advantage is that compiler help you. Usually many people do not pay many
attention to warning but some time ignoring warnings can lead to
disaster... so usually I remove any type of warning I found. In this
case I call a function for no-const object knowing that this function do
not change the data.

Well, after explaining my reasons let's came to a possible (and
portable) fix. A way to fix this issue is to use static inline for
compilers that support this or define for others. As I think that many
people will use gcc so they will see the error I would convert 

static inline const node_asn *
_asn1_find_up_const(const node_asn *node)
{
	return _asn1_find_up((node_asn*) node);
}

to 

#if defined(__GNUC__) && __GNUC__ >= 3
static inline const node_asn *
_asn1_find_up_const(const node_asn *node)
{
	return _asn1_find_up((node_asn*) node);
}
#else
#define _asn1_find_up_const(node) _asn1_find_up((node_asn*) (node))
#endif

freddy77



More information about the Gnutls-dev mailing list