Skip to content

Instantly share code, notes, and snippets.

@booo
Created October 6, 2011 19:15
Show Gist options
  • Select an option

  • Save booo/1268348 to your computer and use it in GitHub Desktop.

Select an option

Save booo/1268348 to your computer and use it in GitHub Desktop.
diff -urN libspatialindex-1.6.1-orig/include/tools/rand48.h libspatialindex-1.6.1/include/tools/rand48.h
--- libspatialindex-1.6.1-orig/include/tools/rand48.h 2010-03-09 03:58:29.000000000 +0100
+++ libspatialindex-1.6.1/include/tools/rand48.h 2011-05-16 13:51:15.000000000 +0200
@@ -1,11 +1,33 @@
#pragma once
-extern void srand48(long seed);
-extern unsigned short *seed48(unsigned short xseed[3]);
-extern long nrand48(unsigned short xseed[3]);
-extern long mrand48(void);
-extern long lrand48(void);
-extern void lcong48(unsigned short p[7]);
-extern long jrand48(unsigned short xseed[3]);
-extern double erand48(unsigned short xseed[3]);
-extern double drand48(void);
+#ifndef __THROW
+/* copy-pasted from sys/cdefs.h */
+/* GCC can always grok prototypes. For C++ programs we add throw()
+ to help it optimize the function calls. But this works only with
+ gcc 2.8.x and egcs. For gcc 3.2 and up we even mark C functions
+ as non-throwing using a function attribute since programs can use
+ the -fexceptions options for C code as well. */
+# if !defined __cplusplus && __GNUC_PREREQ (3, 3)
+# define __THROW __attribute__ ((__nothrow__))
+# define __NTH(fct) __attribute__ ((__nothrow__)) fct
+# else
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+# define __THROW throw ()
+# define __NTH(fct) fct throw ()
+# else
+# define __THROW
+# define __NTH(fct) fct
+# endif
+# endif
+
+#endif
+
+extern void srand48(long seed) __THROW;
+extern unsigned short *seed48(unsigned short xseed[3]) __THROW;
+extern long nrand48(unsigned short xseed[3]) __THROW;
+extern long mrand48(void) __THROW;
+extern long lrand48(void) __THROW;
+extern void lcong48(unsigned short p[7]) __THROW;
+extern long jrand48(unsigned short xseed[3]) __THROW;
+extern double erand48(unsigned short xseed[3]) __THROW;
+extern double drand48(void) __THROW;
diff -urN libspatialindex-1.6.1-orig/src/tools/rand48.cc libspatialindex-1.6.1/src/tools/rand48.cc
--- libspatialindex-1.6.1-orig/src/tools/rand48.cc 2009-10-19 20:09:28.000000000 +0200
+++ libspatialindex-1.6.1/src/tools/rand48.cc 2011-05-16 13:51:34.000000000 +0200
@@ -62,7 +62,7 @@
}
extern void
-srand48(long seed)
+srand48(long seed) __THROW
{
__rand48_Seed[0] = RAND48_SEED_0;
__rand48_Seed[1] = (unsigned short) seed;
@@ -74,7 +74,7 @@
}
extern unsigned short *
-seed48(unsigned short xseed[3])
+seed48(unsigned short xseed[3]) __THROW
{
static unsigned short sseed[3];
@@ -92,27 +92,27 @@
}
extern long
-nrand48(unsigned short xseed[3])
+nrand48(unsigned short xseed[3]) __THROW
{
_dorand48(xseed);
return ((long) xseed[2] << 15) + ((long) xseed[1] >> 1);
}
extern long
-mrand48(void)
+mrand48(void) __THROW
{
_dorand48(__rand48_Seed);
return ((long) __rand48_Seed[2] << 16) + (long) __rand48_Seed[1];
}
extern long
-lrand48(void)
+lrand48(void) __THROW
{
_dorand48(__rand48_Seed);
return ((long) __rand48_Seed[2] << 15) + ((long) __rand48_Seed[1] >> 1);
}
extern void
-lcong48(unsigned short p[7])
+lcong48(unsigned short p[7]) __THROW
{
__rand48_Seed[0] = p[0];
__rand48_Seed[1] = p[1];
@@ -123,14 +123,14 @@
__rand48_Add = p[6];
}
extern long
-jrand48(unsigned short xseed[3])
+jrand48(unsigned short xseed[3]) __THROW
{
_dorand48(xseed);
return ((long) xseed[2] << 16) + (long) xseed[1];
}
extern double
-erand48(unsigned short xseed[3])
+erand48(unsigned short xseed[3]) __THROW
{
_dorand48(xseed);
return ldexp((double) xseed[0], -48) +
@@ -139,7 +139,7 @@
}
extern double
-drand48(void)
+drand48(void) __THROW
{
return erand48(__rand48_Seed);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment