summaryrefslogtreecommitdiff
path: root/source/lib/version.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/lib/version.c')
-rw-r--r--source/lib/version.c45
1 files changed, 34 insertions, 11 deletions
diff --git a/source/lib/version.c b/source/lib/version.c
index 3982646f56..3cae02ad2e 100644
--- a/source/lib/version.c
+++ b/source/lib/version.c
@@ -23,16 +23,39 @@
const char *samba_version_string(void)
{
-#ifdef SAMBA_VERSION_VENDOR_FUNCTION
- return SAMBA_VERSION_VENDOR_FUNCTION;
-#else /* SAMBA_VERSION_VENDOR_FUNCTION */
- #ifdef SAMBA_VERSION_VENDOR_SUFFIX
- #ifdef SAMBA_VERSION_VENDOR_PATCH
- return SAMBA_VERSION_OFFICIAL_STRING "-" SAMBA_VERSION_VENDOR_SUFFIX \
- "-" SAMBA_VERSION_VENDOR_PATCH;
- #endif /* SAMBA_VERSION_VENDOR_PATCH */
- return SAMBA_VERSION_OFFICIAL_STRING "-" SAMBA_VERSION_VENDOR_SUFFIX;
- #endif /* SAMBA_VERSION_VENDOR_SUFFIX */
-#endif /* SAMBA_VERSION_VENDOR_FUNCTION */
+#ifndef SAMBA_VERSION_VENDOR_SUFFIX
return SAMBA_VERSION_OFFICIAL_STRING;
+#else
+ static char *samba_version;
+ int res;
+#ifdef SAMBA_VERSION_VENDOR_PATCH
+ char *tmp_version;
+#endif
+
+ if (samba_version != NULL)
+ return samba_version;
+
+ res = asprintf(&samba_version, "%s-%s",
+ SAMBA_VERSION_OFFICIAL_STRING,
+ SAMBA_VERSION_VENDOR_SUFFIX);
+ /*
+ * Can't use smb_panic here due to dependencies
+ */
+ assert(res != -1);
+
+#ifdef SAMBA_VERSION_VENDOR_PATCH
+ res = asprintf(&tmp_version, "%s-%d", samba_version,
+ SAMBA_VERSION_VENDOR_PATCH);
+ /*
+ * Can't use smb_panic here due to dependencies
+ */
+ assert(res != -1);
+
+ SAFE_FREE(samba_version);
+
+ samba_version = tmp_version;
+#endif
+
+ return samba_version;
+#endif
}