mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Merge branch 'tor-github/pr/1291'
This commit is contained in:
commit
c750ec20ab
4
changes/ticket31532
Normal file
4
changes/ticket31532
Normal file
@ -0,0 +1,4 @@
|
||||
o Code simplification and refactoring:
|
||||
- Use the ptrdiff_t type consistently for expressing variable offsets and
|
||||
pointer differences. Previously we incorrectly (but harmlessly) used
|
||||
int and sometimes off_t for these cases. Closes ticket 31532.
|
@ -72,7 +72,7 @@ typedef struct config_format_t {
|
||||
const struct_member_t *extra;
|
||||
/** The position of a config_suite_t pointer within the toplevel object,
|
||||
* or -1 if there is no such pointer. */
|
||||
int config_suite_offset;
|
||||
ptrdiff_t config_suite_offset;
|
||||
} config_format_t;
|
||||
|
||||
/**
|
||||
|
@ -119,7 +119,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
|
||||
char tmp[RELAY_PAYLOAD_SIZE];
|
||||
rend_cache_entry_t *entry = NULL;
|
||||
crypt_path_t *cpath;
|
||||
off_t dh_offset;
|
||||
ptrdiff_t dh_offset;
|
||||
crypto_pk_t *intro_key = NULL;
|
||||
int status = 0;
|
||||
const char *onion_address;
|
||||
|
@ -158,7 +158,7 @@ chunk_new_with_alloc_size(size_t alloc)
|
||||
static inline chunk_t *
|
||||
chunk_grow(chunk_t *chunk, size_t sz)
|
||||
{
|
||||
off_t offset;
|
||||
ptrdiff_t offset;
|
||||
const size_t memlen_orig = chunk->memlen;
|
||||
const size_t orig_alloc = CHUNK_ALLOC_SIZE(memlen_orig);
|
||||
const size_t new_alloc = CHUNK_ALLOC_SIZE(sz);
|
||||
@ -440,7 +440,7 @@ chunk_copy(const chunk_t *in_chunk)
|
||||
#endif
|
||||
newch->next = NULL;
|
||||
if (in_chunk->data) {
|
||||
off_t offset = in_chunk->data - in_chunk->mem;
|
||||
ptrdiff_t offset = in_chunk->data - in_chunk->mem;
|
||||
newch->data = newch->mem + offset;
|
||||
}
|
||||
return newch;
|
||||
@ -710,7 +710,8 @@ buf_move_all(buf_t *buf_out, buf_t *buf_in)
|
||||
/** Internal structure: represents a position in a buffer. */
|
||||
typedef struct buf_pos_t {
|
||||
const chunk_t *chunk; /**< Which chunk are we pointing to? */
|
||||
int pos;/**< Which character inside the chunk's data are we pointing to? */
|
||||
ptrdiff_t pos;/**< Which character inside the chunk's data are we pointing
|
||||
* to? */
|
||||
size_t chunk_pos; /**< Total length of all previous chunks. */
|
||||
} buf_pos_t;
|
||||
|
||||
@ -726,15 +727,15 @@ buf_pos_init(const buf_t *buf, buf_pos_t *out)
|
||||
/** Advance <b>out</b> to the first appearance of <b>ch</b> at the current
|
||||
* position of <b>out</b>, or later. Return -1 if no instances are found;
|
||||
* otherwise returns the absolute position of the character. */
|
||||
static off_t
|
||||
static ptrdiff_t
|
||||
buf_find_pos_of_char(char ch, buf_pos_t *out)
|
||||
{
|
||||
const chunk_t *chunk;
|
||||
int pos;
|
||||
ptrdiff_t pos;
|
||||
tor_assert(out);
|
||||
if (out->chunk) {
|
||||
if (out->chunk->datalen) {
|
||||
tor_assert(out->pos < (off_t)out->chunk->datalen);
|
||||
tor_assert(out->pos < (ptrdiff_t)out->chunk->datalen);
|
||||
} else {
|
||||
tor_assert(out->pos == 0);
|
||||
}
|
||||
@ -762,7 +763,7 @@ buf_pos_inc(buf_pos_t *pos)
|
||||
{
|
||||
tor_assert(pos->pos < INT_MAX - 1);
|
||||
++pos->pos;
|
||||
if (pos->pos == (off_t)pos->chunk->datalen) {
|
||||
if (pos->pos == (ptrdiff_t)pos->chunk->datalen) {
|
||||
if (!pos->chunk->next)
|
||||
return -1;
|
||||
pos->chunk_pos += pos->chunk->datalen;
|
||||
@ -836,11 +837,11 @@ buf_peek_startswith(const buf_t *buf, const char *cmd)
|
||||
|
||||
/** Return the index within <b>buf</b> at which <b>ch</b> first appears,
|
||||
* or -1 if <b>ch</b> does not appear on buf. */
|
||||
static off_t
|
||||
static ptrdiff_t
|
||||
buf_find_offset_of_char(buf_t *buf, char ch)
|
||||
{
|
||||
chunk_t *chunk;
|
||||
off_t offset = 0;
|
||||
ptrdiff_t offset = 0;
|
||||
tor_assert(buf->datalen < INT_MAX);
|
||||
for (chunk = buf->head; chunk; chunk = chunk->next) {
|
||||
char *cp = memchr(chunk->data, ch, chunk->datalen);
|
||||
@ -863,7 +864,7 @@ int
|
||||
buf_get_line(buf_t *buf, char *data_out, size_t *data_len)
|
||||
{
|
||||
size_t sz;
|
||||
off_t offset;
|
||||
ptrdiff_t offset;
|
||||
|
||||
if (!buf->head)
|
||||
return 0;
|
||||
|
@ -195,7 +195,7 @@
|
||||
* structure <b>st</b>. Example:
|
||||
* <pre>
|
||||
* struct a { int foo; int bar; } x;
|
||||
* off_t bar_offset = offsetof(struct a, bar);
|
||||
* ptrdiff_t bar_offset = offsetof(struct a, bar);
|
||||
* int *bar_p = STRUCT_VAR_P(&x, bar_offset);
|
||||
* *bar_p = 3;
|
||||
* </pre>
|
||||
|
@ -33,6 +33,8 @@
|
||||
#include "lib/conf/conftesting.h"
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
/** Enumeration of types which option values can take */
|
||||
typedef enum config_type_t {
|
||||
CONFIG_TYPE_STRING = 0, /**< An arbitrary string. */
|
||||
@ -89,7 +91,7 @@ typedef struct struct_member_t {
|
||||
* Offset of this field within the structure. Compute this with
|
||||
* offsetof(structure, fieldname).
|
||||
**/
|
||||
int offset;
|
||||
ptrdiff_t offset;
|
||||
} struct_member_t;
|
||||
|
||||
/**
|
||||
@ -102,7 +104,7 @@ typedef struct struct_member_t {
|
||||
typedef struct struct_magic_decl_t {
|
||||
const char *typename;
|
||||
uint32_t magic_val;
|
||||
int magic_offset;
|
||||
ptrdiff_t magic_offset;
|
||||
} struct_magic_decl_t;
|
||||
|
||||
/**
|
||||
|
@ -678,7 +678,7 @@ smartlist_sort_pointers(smartlist_t *sl)
|
||||
static inline void
|
||||
smartlist_heapify(smartlist_t *sl,
|
||||
int (*compare)(const void *a, const void *b),
|
||||
int idx_field_offset,
|
||||
ptrdiff_t idx_field_offset,
|
||||
int idx)
|
||||
{
|
||||
while (1) {
|
||||
@ -725,7 +725,7 @@ smartlist_heapify(smartlist_t *sl,
|
||||
void
|
||||
smartlist_pqueue_add(smartlist_t *sl,
|
||||
int (*compare)(const void *a, const void *b),
|
||||
int idx_field_offset,
|
||||
ptrdiff_t idx_field_offset,
|
||||
void *item)
|
||||
{
|
||||
int idx;
|
||||
@ -754,7 +754,7 @@ smartlist_pqueue_add(smartlist_t *sl,
|
||||
void *
|
||||
smartlist_pqueue_pop(smartlist_t *sl,
|
||||
int (*compare)(const void *a, const void *b),
|
||||
int idx_field_offset)
|
||||
ptrdiff_t idx_field_offset)
|
||||
{
|
||||
void *top;
|
||||
tor_assert(sl->num_used);
|
||||
@ -778,7 +778,7 @@ smartlist_pqueue_pop(smartlist_t *sl,
|
||||
void
|
||||
smartlist_pqueue_remove(smartlist_t *sl,
|
||||
int (*compare)(const void *a, const void *b),
|
||||
int idx_field_offset,
|
||||
ptrdiff_t idx_field_offset,
|
||||
void *item)
|
||||
{
|
||||
int idx = IDX_OF_ITEM(item);
|
||||
@ -802,7 +802,7 @@ smartlist_pqueue_remove(smartlist_t *sl,
|
||||
void
|
||||
smartlist_pqueue_assert_ok(smartlist_t *sl,
|
||||
int (*compare)(const void *a, const void *b),
|
||||
int idx_field_offset)
|
||||
ptrdiff_t idx_field_offset)
|
||||
{
|
||||
int i;
|
||||
for (i = sl->num_used - 1; i >= 0; --i) {
|
||||
|
@ -13,6 +13,7 @@
|
||||
**/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "lib/smartlist_core/smartlist_core.h"
|
||||
#include "lib/smartlist_core/smartlist_foreach.h"
|
||||
@ -72,18 +73,18 @@ int smartlist_bsearch_idx(const smartlist_t *sl, const void *key,
|
||||
|
||||
void smartlist_pqueue_add(smartlist_t *sl,
|
||||
int (*compare)(const void *a, const void *b),
|
||||
int idx_field_offset,
|
||||
ptrdiff_t idx_field_offset,
|
||||
void *item);
|
||||
void *smartlist_pqueue_pop(smartlist_t *sl,
|
||||
int (*compare)(const void *a, const void *b),
|
||||
int idx_field_offset);
|
||||
ptrdiff_t idx_field_offset);
|
||||
void smartlist_pqueue_remove(smartlist_t *sl,
|
||||
int (*compare)(const void *a, const void *b),
|
||||
int idx_field_offset,
|
||||
ptrdiff_t idx_field_offset,
|
||||
void *item);
|
||||
void smartlist_pqueue_assert_ok(smartlist_t *sl,
|
||||
int (*compare)(const void *a, const void *b),
|
||||
int idx_field_offset);
|
||||
ptrdiff_t idx_field_offset);
|
||||
|
||||
char *smartlist_join_strings(smartlist_t *sl, const char *join, int terminate,
|
||||
size_t *len_out) ATTR_MALLOC;
|
||||
|
Loading…
Reference in New Issue
Block a user