Changeset 08606c7159d799fa7f64452f89d777a8a3710738
- Timestamp:
- 31/01/08 19:02:38
(10 months ago)
- Author:
- Rémi Denis-Courmont <rem@videolan.org>
- git-committer:
- Rémi Denis-Courmont <rem@videolan.org> 1201802558 +0000
- git-parent:
[88e2bbbaaa6d2f0b3e2e23e4392607e05abf13f5]
- git-author:
- Rémi Denis-Courmont <rem@videolan.org> 1201802558 +0000
- Message:
- Use posix_memalign when available.
- Use inlines for expansion safety.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| rbb352cd |
r08606c7 |
|
| 110 | 110 | * *pp_orig is the pointer that has to be freed afterwards. |
|---|
| 111 | 111 | */ |
|---|
| 112 | | #if 0 |
|---|
| 113 | | #ifdef HAVE_POSIX_MEMALIGN |
|---|
| 114 | | # define vlc_memalign(align,size,pp_orig) \ |
|---|
| 115 | | ( !posix_memalign( pp_orig, align, size ) ? *(pp_orig) : NULL ) |
|---|
| 116 | | #endif |
|---|
| 117 | | #endif |
|---|
| 118 | | #ifdef HAVE_MEMALIGN |
|---|
| 119 | | /* Some systems have memalign() but no declaration for it */ |
|---|
| 120 | | void * memalign( size_t align, size_t size ); |
|---|
| | 112 | #if defined (HAVE_POSIX_MEMALIGN) |
|---|
| | 113 | static inline |
|---|
| | 114 | void *vlc_memalign (size_t align, size_t size, void **pp) |
|---|
| | 115 | { |
|---|
| | 116 | return posix_memalign (pp, align, size) ? NULL : *pp; |
|---|
| | 117 | } |
|---|
| | 118 | #elif defined (HAVE_MEMALIGN) |
|---|
| | 119 | static inline |
|---|
| | 120 | void *vlc_memalign (size_t align, size_t size, void **pp) |
|---|
| | 121 | { |
|---|
| | 122 | return *pp = memalign (align, size); |
|---|
| | 123 | } |
|---|
| | 124 | #else /* We don't have any choice but to align manually */ |
|---|
| | 125 | static inline |
|---|
| | 126 | void *vlc_memalign (size_t align, size_t size, void **pp) |
|---|
| | 127 | { |
|---|
| | 128 | unsigned char *ptr; |
|---|
| 121 | 129 | |
|---|
| 122 | | # define vlc_memalign(pp_orig,align,size) \ |
|---|
| 123 | | ( *(pp_orig) = memalign( align, size ) ) |
|---|
| | 130 | if (align < 1) |
|---|
| | 131 | return NULL; |
|---|
| 124 | 132 | |
|---|
| 125 | | #else /* We don't have any choice but to align manually */ |
|---|
| 126 | | # define vlc_memalign(pp_orig,align,size) \ |
|---|
| 127 | | (( *(pp_orig) = malloc( size + align - 1 )) \ |
|---|
| 128 | | ? (void *)( (((unsigned long)*(pp_orig)) + (unsigned long)(align-1) ) \ |
|---|
| 129 | | & (~(unsigned long)(align-1)) ) \ |
|---|
| 130 | | : NULL ) |
|---|
| | 133 | align--; |
|---|
| | 134 | ptr = malloc (size + --align); |
|---|
| | 135 | if (ptr == NULL) |
|---|
| | 136 | return NULL; |
|---|
| 131 | 137 | |
|---|
| | 138 | *pp = ptr; |
|---|
| | 139 | ptr += align; |
|---|
| | 140 | return (void *)(((uintptr_t)ptr) & ~align); |
|---|
| | 141 | } |
|---|
| 132 | 142 | #endif |
|---|
| 133 | 143 | |
|---|