From oliver at first.in-berlin.de  Thu Jun  9 02:17:31 2011
From: oliver at first.in-berlin.de (oliver)
Date: Thu, 9 Jun 2011 02:17:31 +0200
Subject: [Rd] "warning: assignment discards qualifiers from pointer
 target type"
In-Reply-To: <B68723F7-F66B-40FD-AE38-0A88C0C51B82@r-project.org>
References: <20110607130854.GA4510@siouxsie> <4DEE3786.5000800@gmail.com>
	<alpine.LFD.2.02.1106071606010.26985@gannet.stats.ox.ac.uk>
	<20110608160839.GA11746@siouxsie>
	<B68723F7-F66B-40FD-AE38-0A88C0C51B82@r-project.org>
Message-ID: <20110609001731.GA3565@siouxsie>

On Wed, Jun 08, 2011 at 02:23:29PM -0400, Simon Urbanek wrote:
> 
> On Jun 8, 2011, at 12:08 PM, oliver wrote:
> 
> > On Wed, Jun 08, 2011 at 12:22:10PM +0100, Prof Brian Ripley wrote:
> >> On Tue, 7 Jun 2011, Duncan Murdoch wrote:
> >> 
> >>> On 07/06/2011 9:08 AM, oliver wrote:
> >>>> Hello,
> >>>> 
> >>>> following an advice here from the list I looked into sources of other
> >>>> packages (xts) and found the TYPEOF() macro/function, which really is
> >>>> helpful.
> >> 
> >> It is documented, of course, but actually better alternatives are
> >> described in 'Writing R Extensions'.
> >> 
> >> We would urge you to study the R sources rather than copy bad habits
> >> from randomly chosen package sources.
> > [...]
> > 
> > Hmhh, it was not randomly chosen, it was, what I got as a hint here on the list.
> > 
> 
> It was not provided to you to look at how it checks arguments. For basic
> usage it's better to look at the R code. The coding styles vary a lot in
> packages (and so does the quality of packages) - some of them are really bad,
> but you have to remember that most people write packages in their free time and
> are not programmers...

OK, I see.


[...]
> >> and there is no
> >> check in that code that LENGTH(filename_sexp) > 0 (or == 1).  In the
> >> R sources you will often see things like
> >> 
> >>    if(!isString(sfile) || LENGTH(sfile) < 1)
> >>        error("invalid '%s' argument", "description");
> > [...]
> > 
> > If it's a vector, I can just pic the first element.
> 
> Yes, but only if it's not a vector of length zero - hence the necessary check.
> 
> 
> > Or does   LENGTH(sfile)  give the length of the string itself
> > (like strlen(3))?
> > 
> 
> No.
[...]

OK, I looked at this now.

LENGTH() checks the length of the vector.

Good to know this.

So the problem of a vector of length 0 can be with any arguments of type SEXP,
hence I will need to check ANY arg on it's length.

This is vital to stability under any situation.

Thanks for this valuable hint!

I will add checks for all my SEXP-args.


Ciao,
   Oliver



[Rd] "warning: assignment discards qualifiers from pointer target type"
oliver