[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

OBSD-particular #define misbehavior...



To all and sundry,

I have recently been trying to port the smartmontools program (see http://smartmontools.sf.net) to the OBSD platform and have had some success. However, one issue has come up which may be due to my ignorance of some particular detail of C programming or something else which I am overlooking.

The problem has to do with the following example #define stmt in the file, int64.h (line 64):

#define PRId64 "lld"

The following example is from the original code using this #define in file, smartd.c (line 453):

PrintOut(LOG_INFO, "Memory still allocated for devices at exit is %"PRId64" bytes.\n", bytes);

As you can see, the value 'lld' is supposed to be inserted into the 'PRId64' placeholder. However, whenever the file is compile with the following command (from the Makefile):

source='smartd.c' object='smartd.o' libtool=no depfile='.deps/smartd.Po' tmpdepfile='.deps/smartd.TPo' depmode=gcc /bin/sh ./depcomp gcc -DHAVE_CONFIG_H -I. -I. -I. -DSMARTMONTOOLS_SYSCONFDIR=\"/usr/local/etc\" -g -O2 -Wall -W -c `test -f 'smartd.c' || echo './'`smartd.c

the following error comes up:

smartd.c:453: syntax error before `PRId64'

Now, in order to overcome this error (and numerous other instances of the same error), I have had to go through and change all the 'PRId64' instances to 'lld'. So, my questions are: 1) is this some sort of a GNU-ism?; 2) is something about the code or compile method which I need to change to use the original code? or 3) should the string used at line 453 in smartd.c have been constructed beforehand with a strncpy (or strlcpy, strncat, etc.) and _then_ used in the line?

BTW, I titled this message as 'OBSD-particular #define misbehavior' because smartmontools has already been ported to Free- and NetBSD and, according to the documentation, they compile fine on those platforms. I don't have either of those two platforms to test it out on, but I'd assume there's no problem compiling the smartd.c line 453 (and others like it) on those platforms. Any thoughts on that?

David



Visit your host, monkey.org