commit 6b905b38bb850d0530ba6f6d02c10b1fb19aef9a Author: Alexander Færøy ahf@torproject.org Date: Thu Apr 20 16:20:14 2017 +0200
Add API entry-point for getting compression method version numbers.
This patch adds `tor_compress_version_str()` and `tor_compress_header_version_str()` to get the version strings of the different compression schema providers. Both functions returns `NULL` in case a given `compress_method_t` is unknown or unsupported.
See: https://bugs.torproject.org/21662 --- src/common/compress.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/common/compress.h | 6 ++++++ src/common/compress_lzma.c | 10 +++++----- src/common/compress_zstd.c | 8 ++++---- 4 files changed, 57 insertions(+), 9 deletions(-)
diff --git a/src/common/compress.c b/src/common/compress.c index 725dde5..e64bbca 100644 --- a/src/common/compress.c +++ b/src/common/compress.c @@ -173,6 +173,48 @@ tor_compress_supports_method(compress_method_t method) } }
+/** Return a string representation of the version of the library providing the + * compression method given in <b>method</b>. Returns NULL if <b>method</b> is + * unknown or unsupported. */ +const char * +tor_compress_version_str(compress_method_t method) +{ + switch (method) { + case GZIP_METHOD: + case ZLIB_METHOD: + return tor_zlib_get_version_str(); + case LZMA_METHOD: + return tor_lzma_get_version_str(); + case ZSTD_METHOD: + return tor_zstd_get_version_str(); + case NO_METHOD: + case UNKNOWN_METHOD: + default: + return NULL; + } +} + +/** Return a string representation of the version of the library, found at + * compile time, providing the compression method given in <b>method</b>. + * Returns NULL if <b>method</b> is unknown or unsupported. */ +const char * +tor_compress_header_version_str(compress_method_t method) +{ + switch (method) { + case GZIP_METHOD: + case ZLIB_METHOD: + return tor_zlib_get_header_version_str(); + case LZMA_METHOD: + return tor_lzma_get_header_version_str(); + case ZSTD_METHOD: + return tor_zstd_get_header_version_str(); + case NO_METHOD: + case UNKNOWN_METHOD: + default: + return NULL; + } +} + /** Return the approximate number of bytes allocated for all * supported compression schemas. */ size_t diff --git a/src/common/compress.h b/src/common/compress.h index 87306f5..182530f 100644 --- a/src/common/compress.h +++ b/src/common/compress.h @@ -55,6 +55,12 @@ tor_compress_is_compression_bomb(size_t size_in, size_t size_out); int tor_compress_supports_method(compress_method_t method);
+const char * +tor_compress_version_str(compress_method_t method); + +const char * +tor_compress_header_version_str(compress_method_t method); + size_t tor_compress_get_total_allocation(void);
diff --git a/src/common/compress_lzma.c b/src/common/compress_lzma.c index c45cb5e..f2952cc 100644 --- a/src/common/compress_lzma.c +++ b/src/common/compress_lzma.c @@ -73,26 +73,26 @@ tor_lzma_method_supported(void) }
/** Return a string representation of the version of the currently running - * version of liblzma. */ + * version of liblzma. Returns NULL if LZMA is unsupported. */ const char * tor_lzma_get_version_str(void) { #ifdef HAVE_LZMA return lzma_version_string(); #else - return "N/A"; + return NULL; #endif }
-/** Return a string representation of the version of the version of liblzma - * used at compilation. */ +/** Return a string representation of the version of liblzma used at + * compilation time. Returns NULL if LZMA is unsupported. */ const char * tor_lzma_get_header_version_str(void) { #ifdef HAVE_LZMA return LZMA_VERSION_STRING; #else - return "N/A"; + return NULL; #endif }
diff --git a/src/common/compress_zstd.c b/src/common/compress_zstd.c index dca4dbd..c838cd9 100644 --- a/src/common/compress_zstd.c +++ b/src/common/compress_zstd.c @@ -38,7 +38,7 @@ tor_zstd_method_supported(void) }
/** Return a string representation of the version of the currently running - * version of libzstd. */ + * version of libzstd. Returns NULL if Zstandard is unsupported. */ const char * tor_zstd_get_version_str(void) { @@ -55,19 +55,19 @@ tor_zstd_get_version_str(void)
return version_str; #else - return "N/A"; + return NULL; #endif }
/** Return a string representation of the version of the version of libzstd - * used at compilation. */ + * used at compilation time. Returns NULL if Zstandard is unsupported. */ const char * tor_zstd_get_header_version_str(void) { #ifdef HAVE_ZSTD return ZSTD_VERSION_STRING; #else - return "N/A"; + return NULL; #endif }