Allow unix_io offsets greater than 2G

Addresses SourceForge Bug: #1547922

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index fb33c16..4ede000 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -691,7 +691,7 @@
 				 const char *arg)
 {
 	struct unix_private_data *data;
-	unsigned long tmp;
+	unsigned long long tmp;
 	char *end;
 
 	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
@@ -702,10 +702,12 @@
 		if (!arg)
 			return EXT2_ET_INVALID_ARGUMENT;
 
-		tmp = strtoul(arg, &end, 0);
+		tmp = strtoull(arg, &end, 0);
 		if (*end)
 			return EXT2_ET_INVALID_ARGUMENT;
 		data->offset = tmp;
+		if (data->offset < 0)
+			return EXT2_ET_INVALID_ARGUMENT;
 		return 0;
 	}
 	return EXT2_ET_INVALID_ARGUMENT;