Skip to content

Commit

Permalink
a switch to disable logging in optimized builds #1103
Browse files Browse the repository at this point in the history
  • Loading branch information
rrrooommmaaa committed May 7, 2020
1 parent eabaa5d commit 86a01db
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/lib/misc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,21 @@ rnp_clear_debug()
debugc = 0;
}

short _rnp_log_switch =
#ifdef NDEBUG
-1 // lazy-initialize later
#else
1 // always on in debug build
#endif
;

void
rnp_init_log_switch()
{
const char *var = getenv("RNP_LOG_CONSOLE");
_rnp_log_switch = !!var;
}

/* portable replacement for strcasecmp(3) */
int
rnp_strcasecmp(const char *s1, const char *s2)
Expand Down
13 changes: 13 additions & 0 deletions src/lib/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@
#define RNP_MSG(msg) (void) fprintf(stdout, msg);
#define RNP_LOG_FD(fd, ...) \
do { \
if (_rnp_log_switch < 0) { \
rnp_init_log_switch(); \
} \
if (!_rnp_log_switch) \
break; \
(void) fprintf((fd), "[%s() %s:%d] ", __func__, __FILE__, __LINE__); \
(void) fprintf((fd), __VA_ARGS__); \
(void) fprintf((fd), "\n"); \
Expand Down Expand Up @@ -133,6 +138,14 @@ bool rnp_set_debug(const char *);
bool rnp_get_debug(const char *);
void rnp_clear_debug();

/* -1 -- not initialized
0 -- logging is off
1 -- loggin is on
*/
extern short _rnp_log_switch;
/* initialize logging switch from environment */
void rnp_init_log_switch();

/* Portable way to convert bits to bytes */

#define BITS_TO_BYTES(b) (((b) + (CHAR_BIT - 1)) / CHAR_BIT)
Expand Down
1 change: 1 addition & 0 deletions src/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ add_executable(rnp_tests
large-mpi.cpp
load-g10.cpp
load-pgp.cpp
log-switch.cpp
partial-length.cpp
rnp_tests.cpp
s2k-iterations.cpp
Expand Down
52 changes: 52 additions & 0 deletions src/tests/log-switch.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* Copyright (c) 2018-2019 [Ribose Inc](https://www.ribose.com).
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "rnp_tests.h"
#include "support.h"

TEST_F(rnp_tests, test_log_switch)
{
FILE * stream;
char * buf;
size_t len;

stream = open_memstream(&buf, &len);
assert_non_null(stream);

// reset _rnp_log_switch manually
_rnp_log_switch = 0;
RNP_LOG_FD(stream, "x");
fflush(stream);
assert_int_equal(0, len); // nothing was written

// enable _rnp_log_switch manually
_rnp_log_switch = 1;
RNP_LOG_FD(stream, "x");
fflush(stream);
assert_true(len > 0); // something was written
fclose(stream);
free(buf);
}
2 changes: 2 additions & 0 deletions src/tests/rnp_tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,8 @@ void test_kbx_nsigs(void **state);

void test_issue_1115(void **state);

void test_log_switch(void **state);

#define assert_true(a) EXPECT_TRUE((a))
#define assert_false(a) EXPECT_FALSE((a))
#define assert_string_equal(a, b) EXPECT_STREQ((a), (b))
Expand Down

0 comments on commit 86a01db

Please sign in to comment.