[Mesa-dev] [PATCH 1/6] c11: add c11 compatibility wrapper around stdlib.h
Emil Velikov
emil.l.velikov at gmail.com
Mon Mar 16 13:30:43 PDT 2015
On 06/03/15 18:26, Brian Paul wrote:
> On Fri, Mar 6, 2015 at 9:32 AM, Emil Velikov <emil.l.velikov at gmail.com
> <mailto:emil.l.velikov at gmail.com>> wrote:
>
> Used for aligned_alloc and other C11 functions missing from the header.
>
> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com
> <mailto:emil.l.velikov at gmail.com>>
> ---
> include/c11_stdlib.h | 118 ++++++++++++++++++++++++++++++
>
>
> I wonder if this should be include/c11/stdlib.h instead.
>
> I also wonder if I should have put c99_math.h in c99/math.h Jose
> followed my pattern with c99_alloca.h
>
> We should probably be more consistent about this. What do you think?
>
>
>
>
> +++++++++++++++++++++
> 1 file changed, 118 insertions(+)
> create mode 100644 include/c11_stdlib.h
>
> diff --git a/include/c11_stdlib.h b/include/c11_stdlib.h
> new file mode 100644
> index 0000000..04e494f
> --- /dev/null
> +++ b/include/c11_stdlib.h
> @@ -0,0 +1,118 @@
> +/*
> + * Mesa 3-D graphics library
> + *
> + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to
> whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included
> + * in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS
> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
> EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
> OTHERWISE,
> + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
> USE OR
> + * OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +/**
> + * Wrapper for stdlib.h which makes sure we have definitions of all
> the c11
> + * functions.
> + */
> +
> +#ifndef _C11_STDLIB_H_
> +#define _C11_STDLIB_H_
> +
> +#include <stdint.h>
>
>
> I stdint.h really needed here?
>
> Otherwise than the naming issue and the stdint.h question, the series
> looks good to me. Reviewed-by: Brian Paul <brianp at vmware.com
> <mailto:brianp at vmware.com>>
>
I've included it due to the uintptr_t below. I'm not 100% sure that
stdlib.h will be sufficient to provide it for platforms which lack both
posix_memalign and _aligned_malloc.
So better be safe than sorry :)
-Emil
...
> +static inline void *
> +aligned_alloc(size_t alignment, size_t size)
> +{
> +#if defined(HAVE_POSIX_MEMALIGN)
> + void *mem;
> + int err = posix_memalign(&mem, alignment, size);
> + if (err)
> + return NULL;
> + return mem;
> +#elif defined(_WIN32) && !defined(__CYGWIN__)
> + return _aligned_malloc(size, alignment);
> +#else
> + uintptr_t ptr, buf;
> +
> + assert( alignment > 0 );
> +
> + ptr = (uintptr_t)malloc(size + alignment + sizeof(void *));
> + if (!ptr)
> + return NULL;
> +
> + buf = (ptr + alignment + sizeof(void *)) &
> ~(uintptr_t)(alignment - 1);
> + *(uintptr_t *)(buf - sizeof(void *)) = ptr;
More information about the mesa-dev
mailing list