mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Merge branch '024_msvc_squashed'
Conflicts: src/or/or.h srcwin32/orconfig.h
This commit is contained in:
commit
b998431a33
@ -3,3 +3,13 @@ all:
|
|||||||
$(MAKE) /F Makefile.nmake
|
$(MAKE) /F Makefile.nmake
|
||||||
cd ../../src/or
|
cd ../../src/or
|
||||||
$(MAKE) /F Makefile.nmake
|
$(MAKE) /F Makefile.nmake
|
||||||
|
cd ../../src/test
|
||||||
|
$(MAKE) /F Makefile.nmake
|
||||||
|
|
||||||
|
clean:
|
||||||
|
cd src/common
|
||||||
|
$(MAKE) /F Makefile.nmake clean
|
||||||
|
cd ../../src/or
|
||||||
|
$(MAKE) /F Makefile.nmake clean
|
||||||
|
cd ../../src/test
|
||||||
|
$(MAKE) /F Makefile.nmake clean
|
||||||
|
7
changes/7304
Normal file
7
changes/7304
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
o Minor bugfixes:
|
||||||
|
- Replace all calls to snprintf outside of src/ext with tor_snprintf.
|
||||||
|
Fix for bug 7304.
|
||||||
|
o Code simplification and refactoring:
|
||||||
|
- Remove the #define to replace snprintf with _snprintf on windows;
|
||||||
|
they have different semantics, and all of our callers should be
|
||||||
|
using tor_snprintf anyway. Partial fix for bug 7304.
|
4
changes/build_with_msvc
Normal file
4
changes/build_with_msvc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
o Features (portability):
|
||||||
|
- Build correctly with MSVC and Makefile.nmake. This resolves
|
||||||
|
numerous bugs and fixes reported by ultramage, including 7305,
|
||||||
|
7308, 7309, 7310, 7312, 7313, 7315, 7316, and 7669.
|
0
changes/enum_bitfield
Normal file
0
changes/enum_bitfield
Normal file
@ -1,6 +1,6 @@
|
|||||||
all: libor.lib libor-crypto.lib libor-event.lib
|
all: libor.lib libor-crypto.lib libor-event.lib
|
||||||
|
|
||||||
CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include
|
CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\ext
|
||||||
|
|
||||||
LIBOR_OBJECTS = address.obj compat.obj container.obj di_ops.obj \
|
LIBOR_OBJECTS = address.obj compat.obj container.obj di_ops.obj \
|
||||||
log.obj memarea.obj mempool.obj procmon.obj util.obj \
|
log.obj memarea.obj mempool.obj procmon.obj util.obj \
|
||||||
@ -18,3 +18,6 @@ libor-crypto.lib: $(LIBOR_CRYPTO_OBJECTS)
|
|||||||
|
|
||||||
libor-event.lib: $(LIBOR_EVENT_OBJECTS)
|
libor-event.lib: $(LIBOR_EVENT_OBJECTS)
|
||||||
lib $(LIBOR_EVENT_OBJECTS) /out:libor-event.lib
|
lib $(LIBOR_EVENT_OBJECTS) /out:libor-event.lib
|
||||||
|
|
||||||
|
clean:
|
||||||
|
del *.obj *.lib libor*.lib
|
||||||
|
@ -60,7 +60,6 @@
|
|||||||
#include <io.h>
|
#include <io.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <projects.h>
|
#include <projects.h>
|
||||||
#define snprintf _snprintf
|
|
||||||
/* this is not exported as W .... */
|
/* this is not exported as W .... */
|
||||||
#define SHGetPathFromIDListW SHGetPathFromIDList
|
#define SHGetPathFromIDListW SHGetPathFromIDList
|
||||||
/* wcecompat has vasprintf */
|
/* wcecompat has vasprintf */
|
||||||
@ -133,6 +132,17 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
|
|||||||
#define DBL_TO_U64(x) ((uint64_t) (x))
|
#define DBL_TO_U64(x) ((uint64_t) (x))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
/* XXXX024 we should instead have a more general check for "Is enum signed?"*/
|
||||||
|
#define ENUM_BF(t) unsigned
|
||||||
|
#else
|
||||||
|
/** Wrapper for having a bitfield of an enumerated type. Where possible, we
|
||||||
|
* just use the enumerated type (so the compiler can help us and notice
|
||||||
|
* problems), but if enumerated types are unsigned, we must use unsigned,
|
||||||
|
* so that the loss of precision doesn't make large values negative. */
|
||||||
|
#define ENUM_BF(t) t
|
||||||
|
#endif
|
||||||
|
|
||||||
/* GCC has several useful attributes. */
|
/* GCC has several useful attributes. */
|
||||||
#if defined(__GNUC__) && __GNUC__ >= 3
|
#if defined(__GNUC__) && __GNUC__ >= 3
|
||||||
#define ATTR_NORETURN __attribute__((noreturn))
|
#define ATTR_NORETURN __attribute__((noreturn))
|
||||||
|
@ -1505,7 +1505,7 @@ struct crypto_digest_t {
|
|||||||
SHA256_CTX sha2; /**< state for SHA256 */
|
SHA256_CTX sha2; /**< state for SHA256 */
|
||||||
} d; /**< State for the digest we're using. Only one member of the
|
} d; /**< State for the digest we're using. Only one member of the
|
||||||
* union is usable, depending on the value of <b>algorithm</b>. */
|
* union is usable, depending on the value of <b>algorithm</b>. */
|
||||||
digest_algorithm_t algorithm : 8; /**< Which algorithm is in use? */
|
ENUM_BF(digest_algorithm_t) algorithm : 8; /**< Which algorithm is in use? */
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Allocate and return a new digest object to compute SHA1 digests.
|
/** Allocate and return a new digest object to compute SHA1 digests.
|
||||||
|
@ -214,16 +214,20 @@ typedef int32_t ssize_t;
|
|||||||
#if (SIZEOF_VOID_P > 4 && SIZEOF_VOID_P <= 8)
|
#if (SIZEOF_VOID_P > 4 && SIZEOF_VOID_P <= 8)
|
||||||
#ifndef HAVE_INTPTR_T
|
#ifndef HAVE_INTPTR_T
|
||||||
typedef int64_t intptr_t;
|
typedef int64_t intptr_t;
|
||||||
|
#define SIZEOF_INTPTR_T 8
|
||||||
#endif
|
#endif
|
||||||
#ifndef HAVE_UINTPTR_T
|
#ifndef HAVE_UINTPTR_T
|
||||||
typedef uint64_t uintptr_t;
|
typedef uint64_t uintptr_t;
|
||||||
|
#define SIZEOF_UINTPTR_T 8
|
||||||
#endif
|
#endif
|
||||||
#elif (SIZEOF_VOID_P > 2 && SIZEOF_VOID_P <= 4)
|
#elif (SIZEOF_VOID_P > 2 && SIZEOF_VOID_P <= 4)
|
||||||
#ifndef HAVE_INTPTR_T
|
#ifndef HAVE_INTPTR_T
|
||||||
typedef int32_t intptr_t;
|
typedef int32_t intptr_t;
|
||||||
|
#define SIZEOF_INTPTR_T 4
|
||||||
#endif
|
#endif
|
||||||
#ifndef HAVE_UINTPTR_T
|
#ifndef HAVE_UINTPTR_T
|
||||||
typedef uint32_t uintptr_t;
|
typedef uint32_t uintptr_t;
|
||||||
|
#define SIZEOF_UINTPTR_T 4
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#error "void * is either >8 bytes or <= 2. In either case, I am confused."
|
#error "void * is either >8 bytes or <= 2. In either case, I am confused."
|
||||||
|
@ -147,6 +147,12 @@ typedef struct tor_tls_context_t {
|
|||||||
|
|
||||||
#define TOR_TLS_MAGIC 0x71571571
|
#define TOR_TLS_MAGIC 0x71571571
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
TOR_TLS_ST_HANDSHAKE, TOR_TLS_ST_OPEN, TOR_TLS_ST_GOTCLOSE,
|
||||||
|
TOR_TLS_ST_SENTCLOSE, TOR_TLS_ST_CLOSED, TOR_TLS_ST_RENEGOTIATE,
|
||||||
|
TOR_TLS_ST_BUFFEREVENT
|
||||||
|
} tor_tls_state_t;
|
||||||
|
|
||||||
/** Holds a SSL object and its associated data. Members are only
|
/** Holds a SSL object and its associated data. Members are only
|
||||||
* accessed from within tortls.c.
|
* accessed from within tortls.c.
|
||||||
*/
|
*/
|
||||||
@ -156,12 +162,9 @@ struct tor_tls_t {
|
|||||||
SSL *ssl; /**< An OpenSSL SSL object. */
|
SSL *ssl; /**< An OpenSSL SSL object. */
|
||||||
int socket; /**< The underlying file descriptor for this TLS connection. */
|
int socket; /**< The underlying file descriptor for this TLS connection. */
|
||||||
char *address; /**< An address to log when describing this connection. */
|
char *address; /**< An address to log when describing this connection. */
|
||||||
enum {
|
ENUM_BF(tor_tls_state_t) state : 3; /**< The current SSL state,
|
||||||
TOR_TLS_ST_HANDSHAKE, TOR_TLS_ST_OPEN, TOR_TLS_ST_GOTCLOSE,
|
* depending on which operations
|
||||||
TOR_TLS_ST_SENTCLOSE, TOR_TLS_ST_CLOSED, TOR_TLS_ST_RENEGOTIATE,
|
* have completed successfully. */
|
||||||
TOR_TLS_ST_BUFFEREVENT
|
|
||||||
} state : 3; /**< The current SSL state, depending on which operations have
|
|
||||||
* completed successfully. */
|
|
||||||
unsigned int isServer:1; /**< True iff this is a server-side connection */
|
unsigned int isServer:1; /**< True iff this is a server-side connection */
|
||||||
unsigned int wasV2Handshake:1; /**< True iff the original handshake for
|
unsigned int wasV2Handshake:1; /**< True iff the original handshake for
|
||||||
* this connection used the updated version
|
* this connection used the updated version
|
||||||
|
@ -4919,7 +4919,8 @@ tor_check_port_forwarding(const char *filename,
|
|||||||
status = tor_spawn_background(filename, argv, NULL, &child_handle);
|
status = tor_spawn_background(filename, argv, NULL, &child_handle);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tor_free(argv);
|
tor_free_((void*)argv);
|
||||||
|
argv=NULL;
|
||||||
|
|
||||||
if (PROCESS_STATUS_ERROR == status) {
|
if (PROCESS_STATUS_ERROR == status) {
|
||||||
log_warn(LD_GENERAL, "Failed to start port forwarding helper %s",
|
log_warn(LD_GENERAL, "Failed to start port forwarding helper %s",
|
||||||
|
@ -1,28 +1,70 @@
|
|||||||
all: tor.exe
|
all: tor.exe
|
||||||
|
|
||||||
CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common
|
CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common \
|
||||||
|
/I ..\ext
|
||||||
|
|
||||||
LIBS = ..\..\..\build-alpha\lib\libevent.a \
|
LIBS = ..\..\..\build-alpha\lib\libevent.lib \
|
||||||
..\..\..\build-alpha\lib\libcrypto.a \
|
..\..\..\build-alpha\lib\libcrypto.lib \
|
||||||
..\..\..\build-alpha\lib\libssl.a \
|
..\..\..\build-alpha\lib\libssl.lib \
|
||||||
..\..\..\build-alpha\lib\libz.a \
|
..\..\..\build-alpha\lib\libz.lib \
|
||||||
ws2_32.lib advapi32.lib shell32.lib
|
ws2_32.lib advapi32.lib shell32.lib
|
||||||
|
|
||||||
LIBTOR_OBJECTS = buffers.obj channel.obj channeltls.obj circuitbuild.obj \
|
LIBTOR_OBJECTS = \
|
||||||
circuitlist.obj circuitmux.obj circuitmux_ewma.obj circuituse.obj \
|
addressmap.obj \
|
||||||
command.obj config.obj connection.obj connection_edge.obj \
|
buffers.obj \
|
||||||
connection_or.obj control.obj cpuworker.obj directory.obj \
|
channel.obj \
|
||||||
dirserv.obj dirvote.obj dns.obj dnsserv.obj geoip.obj hibernate.obj \
|
channeltls.obj \
|
||||||
main.obj microdesc.obj networkstatus.obj nodelist.obj onion.obj \
|
circuitbuild.obj \
|
||||||
policies.obj reasons.obj relay.obj rendclient.obj rendcommon.obj \
|
circuitlist.obj \
|
||||||
rendmid.obj rendservice.obj rephist.obj router.obj routerlist.obj \
|
circuitmux.obj \
|
||||||
routerparse.obj status.obj config_codedigest.obj ntmain.obj
|
circuitmux_ewma.obj \
|
||||||
|
circuitstats.obj \
|
||||||
|
circuituse.obj \
|
||||||
|
command.obj \
|
||||||
|
config.obj \
|
||||||
|
config_codedigest.obj \
|
||||||
|
confparse.obj \
|
||||||
|
connection.obj \
|
||||||
|
connection_edge.obj \
|
||||||
|
connection_or.obj \
|
||||||
|
control.obj \
|
||||||
|
cpuworker.obj \
|
||||||
|
directory.obj \
|
||||||
|
dirserv.obj \
|
||||||
|
dirvote.obj \
|
||||||
|
dns.obj \
|
||||||
|
dnsserv.obj \
|
||||||
|
entrynodes.obj \
|
||||||
|
geoip.obj \
|
||||||
|
hibernate.obj \
|
||||||
|
main.obj \
|
||||||
|
microdesc.obj \
|
||||||
|
networkstatus.obj \
|
||||||
|
nodelist.obj \
|
||||||
|
ntmain.obj \
|
||||||
|
onion.obj \
|
||||||
|
policies.obj \
|
||||||
|
reasons.obj \
|
||||||
|
relay.obj \
|
||||||
|
rendclient.obj \
|
||||||
|
rendcommon.obj \
|
||||||
|
rendmid.obj \
|
||||||
|
rendservice.obj \
|
||||||
|
rephist.obj \
|
||||||
|
replaycache.obj \
|
||||||
|
router.obj \
|
||||||
|
routerlist.obj \
|
||||||
|
routerparse.obj \
|
||||||
|
routerset.obj \
|
||||||
|
statefile.obj \
|
||||||
|
status.obj \
|
||||||
|
transports.obj
|
||||||
|
|
||||||
libtor.lib: $(LIBTOR_OBJECTS)
|
libtor.lib: $(LIBTOR_OBJECTS)
|
||||||
lib $(LIBTOR_OBJECTS) /out:libtor.lib
|
lib $(LIBTOR_OBJECTS) /out:$@
|
||||||
|
|
||||||
tor.exe: libtor.lib tor_main.obj
|
tor.exe: libtor.lib tor_main.obj
|
||||||
$(CC) $(CFLAGS) $(LIBS) libtor.lib ..\common\*.lib tor_main.obj
|
$(CC) $(CFLAGS) $(LIBS) libtor.lib ..\common\*.lib tor_main.obj /Fe$@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
del $(LIBTOR_OBJECTS) *.lib tor.exe
|
del $(LIBTOR_OBJECTS) *.lib tor.exe
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
char *new_address;
|
char *new_address;
|
||||||
time_t expires;
|
time_t expires;
|
||||||
addressmap_entry_source_t source:3;
|
ENUM_BF(addressmap_entry_source_t) source:3;
|
||||||
unsigned src_wildcard:1;
|
unsigned src_wildcard:1;
|
||||||
unsigned dst_wildcard:1;
|
unsigned dst_wildcard:1;
|
||||||
short num_resolve_failures;
|
short num_resolve_failures;
|
||||||
|
@ -142,7 +142,7 @@ struct channel_s {
|
|||||||
* When we send CREATE cells along this connection, which half of the
|
* When we send CREATE cells along this connection, which half of the
|
||||||
* space should we use?
|
* space should we use?
|
||||||
*/
|
*/
|
||||||
circ_id_type_t circ_id_type:2;
|
ENUM_BF(circ_id_type_t) circ_id_type:2;
|
||||||
/*
|
/*
|
||||||
* Which circ_id do we try to use next on this connection? This is
|
* Which circ_id do we try to use next on this connection? This is
|
||||||
* always in the range 0..1<<15-1.
|
* always in the range 0..1<<15-1.
|
||||||
|
29
src/or/or.h
29
src/or/or.h
@ -81,7 +81,6 @@
|
|||||||
#include <process.h>
|
#include <process.h>
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#define snprintf _snprintf
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_BUFFEREVENTS
|
#ifdef USE_BUFFEREVENTS
|
||||||
@ -1592,6 +1591,13 @@ typedef struct entry_connection_t {
|
|||||||
|
|
||||||
} entry_connection_t;
|
} entry_connection_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DIR_SPOOL_NONE=0, DIR_SPOOL_SERVER_BY_DIGEST, DIR_SPOOL_SERVER_BY_FP,
|
||||||
|
DIR_SPOOL_EXTRA_BY_DIGEST, DIR_SPOOL_EXTRA_BY_FP,
|
||||||
|
DIR_SPOOL_CACHED_DIR, DIR_SPOOL_NETWORKSTATUS,
|
||||||
|
DIR_SPOOL_MICRODESC, /* NOTE: if we add another entry, add another bit. */
|
||||||
|
} dir_spool_source_t;
|
||||||
|
|
||||||
/** Subtype of connection_t for an "directory connection" -- that is, an HTTP
|
/** Subtype of connection_t for an "directory connection" -- that is, an HTTP
|
||||||
* connection to retrieve or serve directory material. */
|
* connection to retrieve or serve directory material. */
|
||||||
typedef struct dir_connection_t {
|
typedef struct dir_connection_t {
|
||||||
@ -1610,12 +1616,8 @@ typedef struct dir_connection_t {
|
|||||||
* "spooling" of directory material to the outbuf. Otherwise, we'd have
|
* "spooling" of directory material to the outbuf. Otherwise, we'd have
|
||||||
* to append everything to the outbuf in one enormous chunk. */
|
* to append everything to the outbuf in one enormous chunk. */
|
||||||
/** What exactly are we spooling right now? */
|
/** What exactly are we spooling right now? */
|
||||||
enum {
|
ENUM_BF(dir_spool_source_t) dir_spool_src : 3;
|
||||||
DIR_SPOOL_NONE=0, DIR_SPOOL_SERVER_BY_DIGEST, DIR_SPOOL_SERVER_BY_FP,
|
|
||||||
DIR_SPOOL_EXTRA_BY_DIGEST, DIR_SPOOL_EXTRA_BY_FP,
|
|
||||||
DIR_SPOOL_CACHED_DIR, DIR_SPOOL_NETWORKSTATUS,
|
|
||||||
DIR_SPOOL_MICRODESC, /* NOTE: if we add another entry, add another bit. */
|
|
||||||
} dir_spool_src : 3;
|
|
||||||
/** If we're fetching descriptors, what router purpose shall we assign
|
/** If we're fetching descriptors, what router purpose shall we assign
|
||||||
* to them? */
|
* to them? */
|
||||||
uint8_t router_purpose;
|
uint8_t router_purpose;
|
||||||
@ -1791,7 +1793,8 @@ typedef enum {
|
|||||||
/** A reference-counted address policy rule. */
|
/** A reference-counted address policy rule. */
|
||||||
typedef struct addr_policy_t {
|
typedef struct addr_policy_t {
|
||||||
int refcnt; /**< Reference count */
|
int refcnt; /**< Reference count */
|
||||||
addr_policy_action_t policy_type:2;/**< What to do when the policy matches.*/
|
/** What to do when the policy matches.*/
|
||||||
|
ENUM_BF(addr_policy_action_t) policy_type:2;
|
||||||
unsigned int is_private:1; /**< True iff this is the pseudo-address,
|
unsigned int is_private:1; /**< True iff this is the pseudo-address,
|
||||||
* "private". */
|
* "private". */
|
||||||
unsigned int is_canonical:1; /**< True iff this policy is the canonical
|
unsigned int is_canonical:1; /**< True iff this policy is the canonical
|
||||||
@ -1859,7 +1862,7 @@ typedef struct download_status_t {
|
|||||||
* again? */
|
* again? */
|
||||||
uint8_t n_download_failures; /**< Number of failures trying to download the
|
uint8_t n_download_failures; /**< Number of failures trying to download the
|
||||||
* most recent descriptor. */
|
* most recent descriptor. */
|
||||||
download_schedule_t schedule : 8;
|
ENUM_BF(download_schedule_t) schedule : 8;
|
||||||
} download_status_t;
|
} download_status_t;
|
||||||
|
|
||||||
/** If n_download_failures is this high, the download can never happen. */
|
/** If n_download_failures is this high, the download can never happen. */
|
||||||
@ -2128,7 +2131,7 @@ typedef struct microdesc_t {
|
|||||||
*/
|
*/
|
||||||
time_t last_listed;
|
time_t last_listed;
|
||||||
/** Where is this microdescriptor currently stored? */
|
/** Where is this microdescriptor currently stored? */
|
||||||
saved_location_t saved_location : 3;
|
ENUM_BF(saved_location_t) saved_location : 3;
|
||||||
/** If true, do not attempt to cache this microdescriptor on disk. */
|
/** If true, do not attempt to cache this microdescriptor on disk. */
|
||||||
unsigned int no_save : 1;
|
unsigned int no_save : 1;
|
||||||
/** If true, this microdesc has an entry in the microdesc_map */
|
/** If true, this microdesc has an entry in the microdesc_map */
|
||||||
@ -2378,8 +2381,8 @@ typedef enum {
|
|||||||
/** A common structure to hold a v3 network status vote, or a v3 network
|
/** A common structure to hold a v3 network status vote, or a v3 network
|
||||||
* status consensus. */
|
* status consensus. */
|
||||||
typedef struct networkstatus_t {
|
typedef struct networkstatus_t {
|
||||||
networkstatus_type_t type : 8; /**< Vote, consensus, or opinion? */
|
ENUM_BF(networkstatus_type_t) type : 8; /**< Vote, consensus, or opinion? */
|
||||||
consensus_flavor_t flavor : 8; /**< If a consensus, what kind? */
|
ENUM_BF(consensus_flavor_t) flavor : 8; /**< If a consensus, what kind? */
|
||||||
time_t published; /**< Vote only: Time when vote was written. */
|
time_t published; /**< Vote only: Time when vote was written. */
|
||||||
time_t valid_after; /**< Time after which this vote or consensus applies. */
|
time_t valid_after; /**< Time after which this vote or consensus applies. */
|
||||||
time_t fresh_until; /**< Time before which this is the most recent vote or
|
time_t fresh_until; /**< Time before which this is the most recent vote or
|
||||||
@ -2887,7 +2890,7 @@ typedef struct origin_circuit_t {
|
|||||||
|
|
||||||
/** Kludge to help us prevent the warn in bug #6475 and eventually
|
/** Kludge to help us prevent the warn in bug #6475 and eventually
|
||||||
* debug why we are not seeing first hops in some cases. */
|
* debug why we are not seeing first hops in some cases. */
|
||||||
path_state_t path_state : 3;
|
ENUM_BF(path_state_t) path_state : 3;
|
||||||
|
|
||||||
/** For path probing. Store the temporary probe stream ID
|
/** For path probing. Store the temporary probe stream ID
|
||||||
* for response comparison */
|
* for response comparison */
|
||||||
|
@ -3844,7 +3844,7 @@ get_next_token(memarea_t *area,
|
|||||||
if ((size_t)(eol-next) != 9+obname_len+5 ||
|
if ((size_t)(eol-next) != 9+obname_len+5 ||
|
||||||
strcmp_len(next+9, tok->object_type, obname_len) ||
|
strcmp_len(next+9, tok->object_type, obname_len) ||
|
||||||
strcmp_len(eol-5, "-----", 5)) {
|
strcmp_len(eol-5, "-----", 5)) {
|
||||||
snprintf(ebuf, sizeof(ebuf), "Malformed object: mismatched end tag %s",
|
tor_snprintf(ebuf, sizeof(ebuf), "Malformed object: mismatched end tag %s",
|
||||||
tok->object_type);
|
tok->object_type);
|
||||||
ebuf[sizeof(ebuf)-1] = '\0';
|
ebuf[sizeof(ebuf)-1] = '\0';
|
||||||
RET_ERR(ebuf);
|
RET_ERR(ebuf);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
all: test.exe
|
all: test.exe test-child.exe bench.exe
|
||||||
|
|
||||||
CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common /I ..\or
|
CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common /I ..\or \
|
||||||
|
/I ..\ext
|
||||||
|
|
||||||
LIBS = ..\..\..\build-alpha\lib\libevent.lib \
|
LIBS = ..\..\..\build-alpha\lib\libevent.lib \
|
||||||
..\..\..\build-alpha\lib\libcrypto.lib \
|
..\..\..\build-alpha\lib\libcrypto.lib \
|
||||||
@ -11,10 +12,20 @@ LIBS = ..\..\..\build-alpha\lib\libevent.lib \
|
|||||||
|
|
||||||
TEST_OBJECTS = test.obj test_addr.obj test_containers.obj \
|
TEST_OBJECTS = test.obj test_addr.obj test_containers.obj \
|
||||||
test_crypto.obj test_data.obj test_dir.obj test_microdesc.obj \
|
test_crypto.obj test_data.obj test_dir.obj test_microdesc.obj \
|
||||||
test_pt.obj test_util.obj test_config.obj tinytest.obj
|
test_pt.obj test_util.obj test_config.obj test_cell_formats.obj \
|
||||||
|
test_replay.obj test_introduce.obj tinytest.obj
|
||||||
|
|
||||||
|
tinytest.obj: ..\ext\tinytest.c
|
||||||
|
$(CC) $(CFLAGS) /D snprintf=_snprintf /c ..\ext\tinytest.c
|
||||||
|
|
||||||
test.exe: $(TEST_OBJECTS)
|
test.exe: $(TEST_OBJECTS)
|
||||||
$(CC) $(CFLAGS) $(LIBS) ..\common\*.lib $(TEST_OBJECTS)
|
$(CC) $(CFLAGS) $(LIBS) ..\common\*.lib $(TEST_OBJECTS) /Fe$@
|
||||||
|
|
||||||
|
bench.exe: bench.obj
|
||||||
|
$(CC) $(CFLAGS) bench.obj $(LIBS) ..\common\*.lib /Fe$@
|
||||||
|
|
||||||
|
test-child.exe: test-child.obj
|
||||||
|
$(CC) $(CFLAGS) test-child.obj /Fe$@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
del $(TEST_OBJECTS) *.lib test.exe
|
del *.obj *.lib test.exe bench.exe test-child.exe
|
||||||
|
@ -247,5 +247,6 @@
|
|||||||
#define RSHIFT_DOES_SIGN_EXTEND
|
#define RSHIFT_DOES_SIGN_EXTEND
|
||||||
#define FLEXIBLE_ARRAY_MEMBER 0
|
#define FLEXIBLE_ARRAY_MEMBER 0
|
||||||
#define HAVE_EVENT2_EVENT_H
|
#define HAVE_EVENT2_EVENT_H
|
||||||
#define HAVE_EVENT_BASE_LOOPEXIT
|
|
||||||
#define SHARE_DATADIR ""
|
#define SHARE_DATADIR ""
|
||||||
|
#define HAVE_EVENT2_DNS_H
|
||||||
|
#define HAVE_EVENT_BASE_LOOPEXIT
|
||||||
|
Loading…
Reference in New Issue
Block a user