1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 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);
 }