Print this page
10880 posix_memalign() should avoid clobbering return parameter on failure
*** 22,34 ****
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
- #pragma ident "%Z%%M% %I% %E% SMI"
-
#include "lint.h"
#include <stdlib.h>
#include <errno.h>
/*
* SUSv3 - aligned memory allocation
--- 22,35 ----
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#include "lint.h"
+
+ #include <sys/sysmacros.h>
+
#include <stdlib.h>
#include <errno.h>
/*
* SUSv3 - aligned memory allocation
*** 47,64 ****
*/
int
posix_memalign(void **memptr, size_t alignment, size_t size)
{
void *ptr = NULL;
- int error = 0;
-
- if (alignment == 0 ||
- (alignment & (sizeof (void *) - 1)) != 0 ||
- (alignment & (alignment - 1)) != 0)
- error = EINVAL;
- else if (size != 0 &&
- (ptr = memalign(alignment, size)) == NULL)
- error = ENOMEM;
*memptr = ptr;
! return (error);
}
--- 48,68 ----
*/
int
posix_memalign(void **memptr, size_t alignment, size_t size)
{
void *ptr = NULL;
+ if ((alignment == 0) || !ISP2(alignment) ||
+ (alignment & (sizeof (void *) - 1)) != 0) {
+ return (EINVAL);
+ } else if (size == 0) {
+ *memptr = NULL;
+ return (0);
+ } else {
+ if ((ptr = memalign(alignment, size)) == NULL) {
+ return (ENOMEM);
+ } else {
*memptr = ptr;
! return (0);
! }
! }
}