I'm not sure what your sticking point here is. If mpi does not modify
data in a (char *) pointer, then that really is a (const char *) pointer
and the headers are being unhelpful in not telling the compiler that
the data are constant.
If that is the case you need to use casts to (char *) and the following
private define may be useful to you:
#define CHAR_RW(x) ((char *) CHAR(x))
However, you ask
Is there an easy way to get a char pointer to STRING_ELT((sexp_rdata),0)
and is also backward compatible to old R versions.
and the answer is that there is no such way, since (const char *) and
(char *) are not the same thing and any package that wants to alter the
contents of a string element needs to create a new CHARSXP to be that
element.
BTW, you still have not changed Rmpi to remove the configure problems on
64-bit systems (including assuming libs are in /usr/lib not /usr/lib64) I
pointed out a long time ago.
On Fri, 28 Sep 2007, Hao Yu wrote:
Hi. I am the maintainer of Rmpi package. Now I have a problem regarding
the change of CHAR () in R 2.6.0. According to R 2.6.0 NEWS:
*******
CHAR() now returns (const char *) since CHARSXPs should no
longer be modified in place. This change allows compilers to
warn or error about improper modification. Thanks to Herve
Pages for the suggestion.
*******
Unfortunately this causes Rmpi to fail since MPI requires char pointers
rather than const char pointers. Normally I use
CHAR(STRING_ELT((sexp_rdata),0))
to get the pointer to MPI where a R character vector (C sense) is stored.
Because of the change, all character messengers fail. Is there an easy way
to get a char pointer to STRING_ELT((sexp_rdata),0) and is also backward
compatible to old R versions. BTW Rmpi does not do any modification of
characters at C level.
Thanks
Hao Yu
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595