char *
saf_version_string(int verbose, char *buffer, size_t bufsize)
{
SAF_ENTER(saf_version_string,NULL);
char tmp[64];
const char *fmt, *pre, *suf, *annot = SAF_VERSION_ANNOT;
/* setup */
if (verbose) {
fmt = "version %d.%d release %d";
pre = " (";
suf = ")";
} else {
fmt = "%d.%d.%d";
pre = "-";
suf = "";
}
/* version and release numbers */
sprintf(tmp, fmt, SAF_VERSION_MAJOR, SAF_VERSION_MINOR, SAF_VERSION_RELEASE);
strncpy(buffer, tmp, bufsize);
/* version annotation */
if (annot) {
size_t len = strlen(tmp);
strncpy(buffer+len, pre, len<bufsize?bufsize-len:0);
len += strlen(pre);
strncpy(buffer+len, annot, len<bufsize?bufsize-len:0);
len += strlen(annot);
strncpy(buffer+len, suf, len<bufsize?bufsize-len:0);
}
SAF_LEAVE(buffer);
}