Jerry James 512634e
--- ./src/gmpints.c.orig	2014-11-15 13:13:16.000000000 -0700
Jerry James 512634e
+++ ./src/gmpints.c	2014-12-09 20:00:00.000000000 -0700
Jerry James 512634e
@@ -365,6 +365,41 @@ Obj ObjInt_UInt( UInt i )
Jerry James f93ce6d
   }
Jerry James f93ce6d
 }
Jerry James 78c8178
 
Jerry James f93ce6d
+Obj ObjInt_LongLong( long long i )
Jerry James f93ce6d
+{
Jerry James f93ce6d
+  Obj gmp;
Jerry James f93ce6d
+  unsigned long long ull;
Jerry James f93ce6d
+  size_t j;
Jerry James f93ce6d
+
Jerry James f93ce6d
+  if ( (-(1LL<
Jerry James f93ce6d
+    return INTOBJ_INT((Int) i);
Jerry James f93ce6d
+
Jerry James f93ce6d
+  if ( i >= 0LL ) {
Jerry James f93ce6d
+    gmp = NewBag( T_INTPOS, sizeof(i) );
Jerry James f93ce6d
+    ull = (unsigned long long) i;
Jerry James f93ce6d
+  }
Jerry James f93ce6d
+  else {
Jerry James f93ce6d
+    gmp = NewBag( T_INTNEG, sizeof(i) );
Jerry James f93ce6d
+    ull = (unsigned long long) -i;
Jerry James f93ce6d
+  }
Jerry James f93ce6d
+  for ( j = 0U; j < sizeof(i) / sizeof(TypLimb); j++ )
Jerry James f93ce6d
+    ((TypLimb *)ADDR_OBJ( gmp ))[j] = ull >> (j * sizeof(TypLimb));
Jerry James f93ce6d
+  return GMP_NORMALIZE( gmp );
Jerry James f93ce6d
+}
Jerry James f93ce6d
+
Jerry James f93ce6d
+Obj ObjInt_ULongLong( unsigned long long i )
Jerry James f93ce6d
+{
Jerry James f93ce6d
+  Obj gmp;
Jerry James f93ce6d
+  size_t j;
Jerry James f93ce6d
+
Jerry James f93ce6d
+  if ( i < 1ULL<
Jerry James f93ce6d
+    return INTOBJ_INT((Int) i);
Jerry James f93ce6d
+  gmp = NewBag( T_INTPOS, sizeof(i) );
Jerry James f93ce6d
+  for ( j = 0U; j < sizeof(i) / sizeof(TypLimb); j++ )
Jerry James f93ce6d
+    ((TypLimb *)ADDR_OBJ( gmp ))[j] = i >> (j * sizeof(TypLimb));
Jerry James f93ce6d
+  return GMP_NORMALIZE( gmp );
Jerry James f93ce6d
+}
Jerry James f93ce6d
+
Jerry James f93ce6d
 
Jerry James f93ce6d
 /****************************************************************************
Jerry James f93ce6d
 **
Jerry James 512634e
--- ./src/gmpints.h.orig	2014-11-15 13:13:16.000000000 -0700
Jerry James 512634e
+++ ./src/gmpints.h	2014-12-09 20:00:00.000000000 -0700
Jerry James 512634e
@@ -86,6 +86,21 @@ typedef UInt2           TypDigit;
Jerry James f93ce6d
 Obj ObjInt_Int(Int i);
Jerry James f93ce6d
 Obj ObjInt_UInt(UInt i);
Jerry James 78c8178
 
Jerry James f93ce6d
+
Jerry James 78c8178
+/**************************************************************************
Jerry James 78c8178
+** The following two functions convert a C long long or unsigned long long
Jerry James f93ce6d
+** respectively into* a GAP integer, either an immediate, small integer if
Jerry James 78c8178
+** possible or otherwise a new GAP bag with TNUM T_INTPOS or T_INTNEG.
Jerry James 78c8178
+**
Jerry James 78c8178
+*F ObjInt_LongLong(long long i)
Jerry James 78c8178
+*F ObjInt_ULongLong(unsigned long long i)
Jerry James 78c8178
+**
Jerry James 78c8178
+****************************************************************************/
Jerry James 78c8178
+
Jerry James 78c8178
+Obj ObjInt_LongLong(long long i);
Jerry James 78c8178
+Obj ObjInt_ULongLong(unsigned long long i);
Jerry James 78c8178
+
Jerry James 78c8178
+
Jerry James 78c8178
 /****************************************************************************
Jerry James 78c8178
 **
Jerry James f93ce6d
 */
Jerry James 512634e
--- ./src/integer.c.orig	2014-11-15 13:13:16.000000000 -0700
Jerry James 512634e
+++ ./src/integer.c	2014-12-09 20:00:00.000000000 -0700
Jerry James 512634e
@@ -212,6 +212,58 @@ Obj ObjInt_UInt(UInt i)
Jerry James 78c8178
 }
Jerry James 78c8178
 
Jerry James 78c8178
 
Jerry James 78c8178
+/**************************************************************************
Jerry James 78c8178
+** The following two functions convert a C long long or unsigned long long
Jerry James 78c8178
+** respectively into a GAP integer, either an immediate, small integer if
Jerry James 78c8178
+** possible or otherwise a new GAP bag with TNUM T_INTPOS or T_INTNEG.
Jerry James 78c8178
+**
Jerry James 78c8178
+*F ObjInt_LongLong(long long i)
Jerry James 78c8178
+*F ObjInt_ULongLong(unsigned long long i)
Jerry James 78c8178
+**
Jerry James 78c8178
+****************************************************************************/
Jerry James 78c8178
+
Jerry James 78c8178
+#define NDIGITS_RAW (sizeof (long long) / sizeof (TypDigit))
Jerry James 78c8178
+#define NDIGITS (NDIGITS_RAW >= 4U ? NDIGITS_RAW : 4U)
Jerry James 78c8178
+
Jerry James 78c8178
+Obj ObjInt_LongLong(long long i)
Jerry James 78c8178
+{
Jerry James 78c8178
+    Obj n;
Jerry James 78c8178
+    long long bound = 1LL << NR_SMALL_INT_BITS;
Jerry James 78c8178
+    if (i >= bound) {
Jerry James 78c8178
+        /* We have to make a big integer */
Jerry James 78c8178
+        size_t j;
Jerry James 78c8178
+        n = NewBag(T_INTPOS, NDIGITS);
Jerry James 78c8178
+        for ( j = 0U; j < NDIGITS; j++ )
Jerry James 78c8178
+            ADDR_INT(n)[j] = (TypDigit) (i >> (j * NR_DIGIT_BITS));
Jerry James 78c8178
+        return n;
Jerry James 78c8178
+    } else if (-i > bound) {
Jerry James 78c8178
+        size_t j;
Jerry James 78c8178
+        n = NewBag(T_INTNEG, NDIGITS);
Jerry James 78c8178
+        for ( j = 0U; j < NDIGITS; j++ )
Jerry James 78c8178
+            ADDR_INT(n)[j] = (TypDigit) ((-i) >> (j * NR_DIGIT_BITS));
Jerry James 78c8178
+        return n;
Jerry James 78c8178
+    } else {
Jerry James 78c8178
+        return INTOBJ_INT((Int) i);
Jerry James 78c8178
+    }
Jerry James 78c8178
+}
Jerry James 78c8178
+
Jerry James 78c8178
+Obj ObjInt_ULongLong(unsigned long long i)
Jerry James 78c8178
+{
Jerry James 78c8178
+    Obj n;
Jerry James 78c8178
+    unsigned long long bound = 1ULL << NR_SMALL_INT_BITS;
Jerry James 78c8178
+    if (i >= bound) {
Jerry James 78c8178
+        /* We have to make a big integer */
Jerry James 78c8178
+        size_t j;
Jerry James 78c8178
+        n = NewBag(T_INTPOS, NDIGITS);
Jerry James 78c8178
+        for ( j = 0U; j < NDIGITS; j++ )
Jerry James 78c8178
+            ADDR_INT(n)[j] = (TypDigit) (i >> (j * NR_DIGIT_BITS));
Jerry James 78c8178
+        return n;
Jerry James 78c8178
+    } else {
Jerry James 78c8178
+        return INTOBJ_INT((Int) i);
Jerry James 78c8178
+    }
Jerry James 78c8178
+}
Jerry James 78c8178
+
Jerry James 78c8178
+
Jerry James 78c8178
 
Jerry James 78c8178
 /****************************************************************************
Jerry James 78c8178
 **
Jerry James 512634e
--- ./src/integer.h.orig	2014-11-15 13:13:16.000000000 -0700
Jerry James 512634e
+++ ./src/integer.h	2014-12-09 20:00:00.000000000 -0700
Jerry James f93ce6d
@@ -59,6 +59,20 @@ Obj ObjInt_Int(Int i);
Jerry James 78c8178
 Obj ObjInt_UInt(UInt i);
Jerry James 78c8178
 
Jerry James f93ce6d
 
Jerry James 78c8178
+/**************************************************************************
Jerry James 78c8178
+** The following two functions convert a C long long or unsigned long long
Jerry James f93ce6d
+** respectively into a GAP integer, either an immediate, small integer if
Jerry James 78c8178
+** possible or otherwise a new GAP bag with TNUM T_INTPOS or T_INTNEG.
Jerry James 78c8178
+**
Jerry James 78c8178
+*F ObjInt_LongLong(long long i)
Jerry James 78c8178
+*F ObjInt_ULongLong(unsigned long long i)
Jerry James 78c8178
+**
Jerry James 78c8178
+****************************************************************************/
Jerry James 78c8178
+
Jerry James 78c8178
+Obj ObjInt_LongLong(long long i);
Jerry James 78c8178
+Obj ObjInt_ULongLong(unsigned long long i);
Jerry James 78c8178
+
Jerry James 78c8178
+
Jerry James 78c8178
 /****************************************************************************
Jerry James 78c8178
 **
Jerry James f93ce6d
 *F  PrintInt( <int> ) . . . . . . . . . . . . . . . print an integer constant
Jerry James 512634e
--- ./src/streams.c.orig	2014-11-15 13:13:16.000000000 -0700
Jerry James 512634e
+++ ./src/streams.c	2014-12-09 20:00:00.000000000 -0700
Jerry James 37b82eb
@@ -2134,13 +2134,13 @@ Obj FuncREAD_STRING_FILE (
Jerry James 37b82eb
         struct stat fstatbuf;
Jerry James 37b82eb
         if ( syBuf[INT_INTOBJ(fid)].pipe == 0 &&
Jerry James 37b82eb
              fstat( syBuf[INT_INTOBJ(fid)].fp,  &fstatbuf) == 0 ) {
Jerry James 37b82eb
-            len = fstatbuf.st_size;
Jerry James 37b82eb
+            len = (Int) fstatbuf.st_size;
Jerry James 37b82eb
             str = NEW_STRING( len );
Jerry James 37b82eb
             ret = read( syBuf[INT_INTOBJ(fid)].fp, 
Jerry James 37b82eb
                         CHARS_STRING(str), len);
Jerry James 37b82eb
             CHARS_STRING(str)[ret] = '\0';
Jerry James 37b82eb
             SET_LEN_STRING(str, ret);
Jerry James 37b82eb
-            if ( ret == len ) {
Jerry James 37b82eb
+            if ( (off_t) ret == fstatbuf.st_size ) {
Jerry James 37b82eb
                  return str;
Jerry James 37b82eb
             }
Jerry James 37b82eb
         }