]> Zhao Yanbai Git Server - minix.git/commitdiff
Some 64-bit file offset changes that were left out accidentally in the first
authorPhilip Homburg <philip@cs.vu.nl>
Wed, 6 Dec 2006 15:21:27 +0000 (15:21 +0000)
committerPhilip Homburg <philip@cs.vu.nl>
Wed, 6 Dec 2006 15:21:27 +0000 (15:21 +0000)
commit.

drivers/random/main.c
include/minix/callnr.h
include/unistd.h
lib/other/Makefile.in
lib/syscall/Makefile.in
servers/vfs/param.h
servers/vfs/table.c

index 5d79dc1f2cf57c21eb26b95bb3bbe936b78ec099..78f5713106c87b7f0fd6a2e9df6520ae011b58cd 100644 (file)
@@ -25,7 +25,7 @@ extern int errno;                     /* error number for PM calls */
 
 FORWARD _PROTOTYPE( char *r_name, (void) );
 FORWARD _PROTOTYPE( struct device *r_prepare, (int device) );
-FORWARD _PROTOTYPE( int r_transfer, (int proc_nr, int opcode, off_t position,
+FORWARD _PROTOTYPE( int r_transfer, (int proc_nr, int opcode, u64_t position,
                                iovec_t *iov, unsigned nr_req, int safe) );
 FORWARD _PROTOTYPE( int r_do_open, (struct driver *dp, message *m_ptr) );
 FORWARD _PROTOTYPE( void r_init, (void) );
@@ -95,7 +95,7 @@ int device;
 PRIVATE int r_transfer(proc_nr, opcode, position, iov, nr_req, safe)
 int proc_nr;                   /* process doing the request */
 int opcode;                    /* DEV_GATHER or DEV_SCATTER */
-off_t position;                        /* offset on device to read or write */
+u64_t position;                        /* offset on device to read or write */
 iovec_t *iov;                  /* pointer to read or write request vector */
 unsigned nr_req;               /* length of request vector */
 int safe;                      /* safe copies? */
@@ -105,6 +105,7 @@ int safe;                   /* safe copies? */
   vir_bytes user_vir;
   struct device *dv;
   unsigned long dv_size;
+  int r;
   size_t vir_offset = 0;
 
   /* Get minor device number and check for /dev/null. */
@@ -129,16 +130,30 @@ int safe;                 /* safe copies? */
                if (opcode == DEV_GATHER) {
                    random_getbytes(random_buf, chunk);
                    if(safe) {
-                     sys_safecopyto(proc_nr, user_vir, vir_offset,
-                       (vir_bytes) random_buf, chunk, D);
+                       r= sys_safecopyto(proc_nr, user_vir, vir_offset,
+                               (vir_bytes) random_buf, chunk, D);
+                       if (r != OK)
+                       {
+                               printf(
+               "random: sys_safecopyto failed for proc %d, grant %d\n",
+                                       proc_nr, user_vir);
+                               return r;
+                       }
                    } else {
                      sys_vircopy(SELF, D, (vir_bytes) random_buf, 
                        proc_nr, D, user_vir + vir_offset, chunk);
                    }
                } else if (opcode == DEV_SCATTER) {
                    if(safe) {
-                     sys_safecopyfrom(proc_nr, user_vir, vir_offset,
-                       (vir_bytes) random_buf, chunk, D);
+                       r= sys_safecopyfrom(proc_nr, user_vir, vir_offset,
+                               (vir_bytes) random_buf, chunk, D);
+                       if (r != OK)
+                       {
+                               printf(
+               "random: sys_safecopyfrom failed for proc %d, grant %d\n",
+                                       proc_nr, user_vir);
+                               return r;
+                       }
                    } else {
                      sys_vircopy(proc_nr, D, user_vir + vir_offset, 
                        SELF, D, (vir_bytes) random_buf, chunk);
@@ -156,7 +171,7 @@ int safe;                   /* safe copies? */
        }
 
        /* Book the number of bytes transferred. */
-       position += count;
+       position= add64u(position, count);
        if ((iov->iov_size -= count) == 0) { iov++; nr_req--; vir_offset = 0; }
 
   }
index b776a46bfabf66e99a3ee02bee13d53b13d2ec83..20930bc02bef6082938aa73f38443ec283af0141 100755 (executable)
@@ -65,6 +65,7 @@
 #define SYSUNAME         78
 #define GETSYSINFO       79    /* to PM or FS */
 #define GETDENTS         80    /* to FS */
+#define LLSEEK           81    /* to FS */
 #define FSTATFS                  82    /* to FS */
 #define SELECT            85   /* to FS */
 #define FCHDIR            86   /* to FS */
index 2b1baafd78609a823db8202bd064915deabf2d3b..c8790f270122906a7f1a75bd24f82a51fb06e47f 100755 (executable)
@@ -165,6 +165,8 @@ extern int optreset;        /* Reset getopt state */
 
 _PROTOTYPE( int brk, (char *_addr)                                     );
 _PROTOTYPE( int chroot, (const char *_name)                            );
+_PROTOTYPE( int lseek64, (int _fd, u64_t _offset, int _whence,
+                                               u64_t *_newpos)         );
 _PROTOTYPE( int mknod, (const char *_name, _mnx_Mode_t _mode, Dev_t _addr)     );
 _PROTOTYPE( int mknod4, (const char *_name, _mnx_Mode_t _mode, Dev_t _addr,
            long _size)                                                 );
index 2a16f371cb6dce80ace540def80105cb3be3e3ad..56a9b9668f44cd4bff652804b909c7785854adf1 100644 (file)
@@ -17,6 +17,7 @@ libc_FILES=" \
        _getpprocnr.c \
        _getprocnr.c \
        _getsysinfo.c \
+       _lseek64.c \
        _reboot.c \
        _seekdir.c \
        _sysuname.c \
index 306e03e6b4cba5fa22a0069b1d668a7f3d2d9e4d..ed583db84453d66214f35647f204725272ebb970 100644 (file)
@@ -58,6 +58,7 @@ libc_FILES=" \
        killpg.s \
        link.s \
        lseek.s \
+       lseek64.s \
        lstat.s \
        mkdir.s \
        mkfifo.s \
index 2ea84d819604e7c773b136867d2034f4407c98be..a64ecab4383129d898fa0aacc46b03d800f96c02 100644 (file)
@@ -56,6 +56,7 @@
 /* The following names are synonyms for the variables in the output message. */
 #define reply_type    m_type
 #define reply_l1      m2_l1
+#define reply_l2      m2_l2
 #define reply_i1      m1_i1
 #define reply_i2      m1_i2
 #define reply_t1      m4_l1
index 09d96bfa0d56a9802b74fd68db25612ecc0288bd..5b27eefc748b0935b00464beb7a11cfe373d9164 100644 (file)
@@ -99,7 +99,7 @@ PUBLIC _PROTOTYPE (int (*call_vec[]), (void) ) = {
        no_sys,         /* 78 = (sysuname) */
        do_getsysinfo,  /* 79 = getsysinfo */
        do_getdents,    /* 80 = getdents */
-       no_sys,         /* 81 = unused */
+       do_llseek,      /* 81 = llseek */
        do_fstatfs,     /* 82 = fstatfs */
        no_sys,         /* 83 = unused */
        no_sys,         /* 84 = unused */