Skip to content
This repository has been archived by the owner on May 4, 2018. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
queue: fix pointer truncation on LLP64 platforms
QUEUE_DATA used to cast a pointer to long and back to pointer. This can
corrupt pointers on systems where the long type isn't large enough to
store pointer, like Windows x64. This commit fixes that.
  • Loading branch information
piscisaureus committed Jun 15, 2013
1 parent 7e8d0e6 commit 7eae6ee
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/queue.h
Expand Up @@ -16,6 +16,8 @@
#ifndef QUEUE_H_
#define QUEUE_H_

#include <stdint.h>

typedef void *QUEUE[2];

/* Private macros. */
Expand All @@ -26,7 +28,7 @@ typedef void *QUEUE[2];

/* Public macros. */
#define QUEUE_DATA(ptr, type, field) \
((type *) ((char *) (ptr) - ((long) &((type *) 0)->field)))
((type *) ((char *) (ptr) - ((uintptr_t) &((type *) 0)->field)))

#define QUEUE_FOREACH(q, h) \
for ((q) = (QUEUE *) (*(h))[0]; (q) != (h); (q) = (QUEUE *) (*(q))[0])
Expand Down

0 comments on commit 7eae6ee

Please sign in to comment.