aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2004-12-22 02:32:26 +0000
committerNick Mathewson <nickm@torproject.org>2004-12-22 02:32:26 +0000
commit32978afa5481f66c9ff4fb7ededbdecf6800c16c (patch)
tree3bf7fdc0ad64e66a100f0a987c9777a671a41136 /src/common
parent64195e380d08b7e293071392ffb16d5691129eda (diff)
downloadtor-32978afa5481f66c9ff4fb7ededbdecf6800c16c.tar
tor-32978afa5481f66c9ff4fb7ededbdecf6800c16c.tar.gz
Workaround for brain-damaged __FILE__ handling on MSVC: keep Nick's name out
of the warning messages. svn:r3199
Diffstat (limited to 'src/common')
-rw-r--r--src/common/compat.c23
-rw-r--r--src/common/compat.h3
-rw-r--r--src/common/test.h17
-rw-r--r--src/common/tortls.h3
-rw-r--r--src/common/util.h3
5 files changed, 39 insertions, 10 deletions
diff --git a/src/common/compat.c b/src/common/compat.c
index 1c184de4a..1b00c6395 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -113,6 +113,29 @@ int tor_vsnprintf(char *str, size_t size, const char *format, va_list args)
return r;
}
+/** Take a filename and return a pointer to its final element. This
+ * function is called on __FILE__ to fix a MSVC nit where __FILE__
+ * contains the full path to the file. This is bad, because it
+ * confuses users to find the home directory of the person who
+ * compiled the binary in their warrning messages.
+ */
+const char *
+_tor_fix_source_file(const char *fname)
+{
+ const char *cp1, *cp2;
+ cp1 = strrchr(fname, '/');
+ cp2 = strrchr(fname, '\\');
+ if (cp1 && cp2) {
+ return (cp1<cp2)?(cp2+1):(cp1+1);
+ } else if (cp1) {
+ return cp1+1;
+ } else if (cp2) {
+ return cp2+2;
+ } else {
+ return fname;
+ }
+}
+
#ifndef UNALIGNED_INT_ACCESS_OK
/**
* Read a 16-bit value beginning at <b>cp</b>. Equivalent to
diff --git a/src/common/compat.h b/src/common/compat.h
index 20c243e50..48163a95f 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -86,6 +86,9 @@ int tor_vsnprintf(char *str, size_t size, const char *format, va_list args);
#define TOR_ISXDIGIT(c) isxdigit((int)(unsigned char)(c))
#define TOR_ISDIGIT(c) isdigit((int)(unsigned char)(c))
+#define _SHORT_FILE_ (_tor_fix_source_file(__FILE__))
+const char *_tor_fix_source_file(const char *fname);
+
/* ===== Time compatibility */
#if !defined(HAVE_GETTIMEOFDAY) && !defined(HAVE_STRUCT_TIMEVAL_TV_SEC)
struct timeval {
diff --git a/src/common/test.h b/src/common/test.h
index 083d00eae..12731a53b 100644
--- a/src/common/test.h
+++ b/src/common/test.h
@@ -13,6 +13,7 @@
#include <string.h>
#include <stdio.h>
+#include "compat.h"
#define STMT_BEGIN do {
#define STMT_END } while (0)
@@ -29,7 +30,7 @@ extern int have_failed;
STMT_BEGIN \
have_failed = 1; \
printf("\nFile %s: line %d (%s): assertion failed.", \
- __FILE__, \
+ _SHORT_FILE_, \
__LINE__, \
PRETTY_FUNCTION); \
return; \
@@ -40,7 +41,7 @@ extern int have_failed;
if (expr) { printf("."); fflush(stdout); } else { \
have_failed = 1; \
printf("\nFile %s: line %d (%s): assertion failed: (%s)\n", \
- __FILE__, \
+ _SHORT_FILE_, \
__LINE__, \
PRETTY_FUNCTION, \
#expr); \
@@ -54,7 +55,7 @@ extern int have_failed;
have_failed = 1; \
printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n"\
" (%ld != %ld)\n", \
- __FILE__, \
+ _SHORT_FILE_, \
__LINE__, \
PRETTY_FUNCTION, \
#expr1, #expr2, \
@@ -69,7 +70,7 @@ extern int have_failed;
have_failed = 1; \
printf("\nFile %s: line %d (%s): Assertion failed: (%s!=%s)\n"\
" (%ld == %ld)\n", \
- __FILE__, \
+ _SHORT_FILE_, \
__LINE__, \
PRETTY_FUNCTION, \
#expr1, #expr2, \
@@ -84,7 +85,7 @@ extern int have_failed;
have_failed = 1; \
printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n"\
" (\"%s\" != \"%s\")\n", \
- __FILE__, \
+ _SHORT_FILE_, \
__LINE__, \
PRETTY_FUNCTION, \
#expr1, #expr2, \
@@ -99,7 +100,7 @@ extern int have_failed;
have_failed = 1; \
printf("\nFile %s: line %d (%s): Assertion failed: (%s!=%s)\n"\
" (\"%s\" == \"%s\")\n", \
- __FILE__, \
+ _SHORT_FILE_, \
__LINE__, \
PRETTY_FUNCTION, \
#expr1, #expr2, \
@@ -113,7 +114,7 @@ extern int have_failed;
if (!memcmp(v1,v2,(len))) { printf("."); fflush(stdout); } else {\
have_failed = 1; \
printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n", \
- __FILE__, \
+ _SHORT_FILE_, \
__LINE__, \
PRETTY_FUNCTION, \
#expr1, #expr2); \
@@ -126,7 +127,7 @@ extern int have_failed;
if (memcmp(v1,v2,(len))) { printf("."); fflush(stdout); } else {\
have_failed = 1; \
printf("\nFile %s: line %d (%s): Assertion failed: (%s!=%s)\n", \
- __FILE__, \
+ _SHORT_FILE_, \
__LINE__, \
PRETTY_FUNCTION, \
#expr1, #expr2); \
diff --git a/src/common/tortls.h b/src/common/tortls.h
index 7c6248e8a..33fe573a5 100644
--- a/src/common/tortls.h
+++ b/src/common/tortls.h
@@ -12,6 +12,7 @@
**/
#include "../common/crypto.h"
+#include "../common/compat.h"
/* Opaque structure to hold a TLS connection. */
typedef struct tor_tls_st tor_tls;
@@ -42,7 +43,7 @@ unsigned long tor_tls_get_n_bytes_written(tor_tls *tls);
/* Log and abort if there are unhandled TLS errors in OpenSSL's error stack.
*/
-#define assert_no_tls_errors() _assert_no_tls_errors(__FILE__,__LINE__)
+#define assert_no_tls_errors() _assert_no_tls_errors(_SHORT_FILE_,__LINE__)
void _assert_no_tls_errors(const char *fname, int line);
diff --git a/src/common/util.h b/src/common/util.h
index 9fe7262aa..f1b1bff61 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -13,6 +13,7 @@
#include "orconfig.h"
#include "torint.h"
+#include "compat.h"
#include <stdio.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
@@ -38,7 +39,7 @@
#define tor_assert(expr) do { \
if (!(expr)) { \
log(LOG_ERR, "%s:%d: %s: Assertion %s failed; aborting.", \
- __FILE__, __LINE__, __FUNCTION__, #expr); \
+ _SHORT_FILE_, __LINE__, __FUNCTION__, #expr); \
assert(expr); /* write to console too. */ \
abort(); /* unreached */ \
} } while (0)