X-Git-Url: http://git.liburcu.org/?p=userspace-rcu.git;a=blobdiff_plain;f=src%2Fcompat-rand.h;fp=src%2Fcompat-rand.h;h=7c6acde32f00808dbc15904ad4d775444294153d;hp=0000000000000000000000000000000000000000;hb=094c8c59183be7b084e4faf061dc23faab1f13b1;hpb=9a62b0f0b1c28090b92fabb7932cc20451f3090e diff --git a/src/compat-rand.h b/src/compat-rand.h new file mode 100644 index 0000000..7c6acde --- /dev/null +++ b/src/compat-rand.h @@ -0,0 +1,63 @@ +#ifndef _COMPAT_RAND_H +#define _COMPAT_RAND_H + +/* + * compat-rand.h + * + * Userspace RCU library - rand/rand_r Compatibility Header + * + * Copyright 1996 - Ulrich Drepper + * Copyright 2013 - Pierre-Luc St-Charles + * + * Note: this file is only used to simplify the code required to + * use the 'rand_r(...)' system function across multiple platforms, + * which might not always be referenced the same way. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifdef __ANDROID__ +/* + * Reentrant random function from POSIX.1c. + * Copyright (C) 1996, 1999 Free Software Foundation, Inc. + * This file is part of the GNU C Library. + * Contributed by Ulrich Drepper >, 1996. + */ +static inline int rand_r(unsigned int *seed) +{ + unsigned int next = *seed; + int result; + + next *= 1103515245; + next += 12345; + result = (unsigned int) (next / 65536) % 2048; + + next *= 1103515245; + next += 12345; + result <<= 10; + result ^= (unsigned int) (next / 65536) % 1024; + + next *= 1103515245; + next += 12345; + result <<= 10; + result ^= (unsigned int) (next / 65536) % 1024; + + *seed = next; + + return result; +} +#endif /* __ANDROID__ */ + +#endif /* _COMPAT_RAND_H */