2004-10-21 msnyder <msnyder@redhat.com>
[deliverable/binutils-gdb.git] / gdb / remote-fileio.c
index 5fa387f79deabd1b8cf8e9c0953f5925ba8b9e22..281872ec6c0900e0dee1260ec497a12a5890d0e3 100644 (file)
 #include "gdbcmd.h"
 #include "remote.h"
 #include "gdb/fileio.h"
+#include "gdb_wait.h"
+#include "gdb_stat.h"
+#include "remote-fileio.h"
 
-#include <ctype.h>
 #include <fcntl.h>
 #include <sys/time.h>
-#ifdef USG
-#include <sys/types.h>
-#endif
-#include <sys/stat.h>
 #ifdef __CYGWIN__
-#include <sys/cygwin.h>
+#include <sys/cygwin.h>                /* For cygwin_conv_to_full_posix_path.  */
 #endif
-#include <setjmp.h>
 #include <signal.h>
 
 static struct {
@@ -52,7 +49,7 @@ static struct {
 static int remote_fio_system_call_allowed = 0;
 
 static int
-remote_fileio_init_fd_map ()
+remote_fileio_init_fd_map (void)
 {
   int i;
 
@@ -70,7 +67,7 @@ remote_fileio_init_fd_map ()
 }
 
 static int
-remote_fileio_resize_fd_map ()
+remote_fileio_resize_fd_map (void)
 {
   if (!remote_fio_data.fd_map)
     return remote_fileio_init_fd_map ();
@@ -82,7 +79,7 @@ remote_fileio_resize_fd_map ()
 }
 
 static int
-remote_fileio_next_free_fd ()
+remote_fileio_next_free_fd (void)
 {
   int i;
 
@@ -179,7 +176,7 @@ remote_fileio_mode_to_host (long mode, int open_call)
   return hmode;
 }
 
-static long long
+static LONGEST
 remote_fileio_mode_to_target (mode_t mode)
 {
   mode_t tmode = 0;
@@ -285,7 +282,7 @@ remote_fileio_seek_flag_to_host (long num, int *flag)
 }
 
 static int
-remote_fileio_extract_long (char **buf, long long *retlong)
+remote_fileio_extract_long (char **buf, LONGEST *retlong)
 {
   char *c;
   int sign = 1;
@@ -324,11 +321,12 @@ static int
 remote_fileio_extract_int (char **buf, long *retint)
 {
   int ret;
-  long long retlong;
+  LONGEST retlong;
 
   if (!retint)
     return -1;
-  if (!(ret = remote_fileio_extract_long (buf, &retlong)))
+  ret = remote_fileio_extract_long (buf, &retlong);
+  if (!ret)
     *retint = (long) retlong;
   return ret;
 }
@@ -337,7 +335,7 @@ static int
 remote_fileio_extract_ptr_w_len (char **buf, CORE_ADDR *ptrval, int *length)
 {
   char *c;
-  long long retlong;
+  LONGEST retlong;
 
   if (!buf || !*buf || !**buf || !ptrval || !length)
     return -1;
@@ -357,7 +355,7 @@ remote_fileio_extract_ptr_w_len (char **buf, CORE_ADDR *ptrval, int *length)
 
 /* Convert to big endian */
 static void
-remote_fileio_to_be (long long num, char *buf, int bytes)
+remote_fileio_to_be (LONGEST num, char *buf, int bytes)
 {
   int i;
 
@@ -365,16 +363,10 @@ remote_fileio_to_be (long long num, char *buf, int bytes)
     buf[i] = (num >> (8 * (bytes - i - 1))) & 0xff;
 }
 
-static void
-remote_fileio_to_fio_int (long num, fio_int_t fnum)
-{
-  remote_fileio_to_be ((long long) num, (char *) fnum, 4);
-}
-
 static void
 remote_fileio_to_fio_uint (long num, fio_uint_t fnum)
 {
-  remote_fileio_to_be ((long long) num, (char *) fnum, 4);
+  remote_fileio_to_be ((LONGEST) num, (char *) fnum, 4);
 }
 
 static void
@@ -386,17 +378,17 @@ remote_fileio_to_fio_mode (mode_t num, fio_mode_t fnum)
 static void
 remote_fileio_to_fio_time (time_t num, fio_time_t fnum)
 {
-  remote_fileio_to_be ((long long) num, (char *) fnum, 4);
+  remote_fileio_to_be ((LONGEST) num, (char *) fnum, 4);
 }
 
 static void
-remote_fileio_to_fio_long (long long num, fio_long_t fnum)
+remote_fileio_to_fio_long (LONGEST num, fio_long_t fnum)
 {
   remote_fileio_to_be (num, (char *) fnum, 8);
 }
 
 static void
-remote_fileio_to_fio_ulong (long long num, fio_ulong_t fnum)
+remote_fileio_to_fio_ulong (LONGEST num, fio_ulong_t fnum)
 {
   remote_fileio_to_be (num, (char *) fnum, 8);
 }
@@ -411,9 +403,18 @@ remote_fileio_to_fio_stat (struct stat *st, struct fio_stat *fst)
   remote_fileio_to_fio_uint ((long) st->st_uid, fst->fst_uid);
   remote_fileio_to_fio_uint ((long) st->st_gid, fst->fst_gid);
   remote_fileio_to_fio_uint ((long) st->st_rdev, fst->fst_rdev);
-  remote_fileio_to_fio_ulong ((long long) st->st_size, fst->fst_size);
-  remote_fileio_to_fio_ulong ((long long) st->st_blksize, fst->fst_blksize);
-  remote_fileio_to_fio_ulong ((long long) st->st_blocks, fst->fst_blocks);
+  remote_fileio_to_fio_ulong ((LONGEST) st->st_size, fst->fst_size);
+  remote_fileio_to_fio_ulong ((LONGEST) st->st_blksize, fst->fst_blksize);
+#if HAVE_STRUCT_STAT_ST_BLOCKS
+  remote_fileio_to_fio_ulong ((LONGEST) st->st_blocks, fst->fst_blocks);
+#else
+  /* FIXME: This is correct for DJGPP, but other systems that don't
+     have st_blocks, if any, might prefer 512 instead of st_blksize.
+     (eliz, 30-12-2003)  */
+  remote_fileio_to_fio_ulong (((LONGEST) st->st_size + st->st_blksize - 1)
+                             / (LONGEST) st->st_blksize,
+                             fst->fst_blocks);
+#endif
   remote_fileio_to_fio_time (st->st_atime, fst->fst_atime);
   remote_fileio_to_fio_time (st->st_mtime, fst->fst_mtime);
   remote_fileio_to_fio_time (st->st_ctime, fst->fst_ctime);
@@ -428,7 +429,6 @@ remote_fileio_to_fio_timeval (struct timeval *tv, struct fio_timeval *ftv)
 
 static int remote_fio_ctrl_c_flag = 0;
 static int remote_fio_no_longjmp = 0;
-jmp_buf remote_fio_jmp_buf;
 
 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
 static struct sigaction remote_fio_sa;
@@ -438,7 +438,7 @@ static void (*remote_fio_ofunc)(int);
 #endif
 
 static void
-remote_fileio_sig_init ()
+remote_fileio_sig_init (void)
 {
 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
   remote_fio_sa.sa_handler = SIG_IGN;
@@ -464,7 +464,7 @@ remote_fileio_sig_set (void (*sigint_func)(int))
 }
 
 static void
-remote_fileio_sig_exit ()
+remote_fileio_sig_exit (void)
 {
 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
   sigaction (SIGINT, &remote_fio_osa, NULL);
@@ -514,13 +514,13 @@ remote_fileio_reply (int retcode, int error)
 }
 
 static void
-remote_fileio_ioerror ()
+remote_fileio_ioerror (void)
 {
   remote_fileio_reply (-1, FILEIO_EIO);
 }
 
 static void
-remote_fileio_badfd ()
+remote_fileio_badfd (void)
 {
   remote_fileio_reply (-1, FILEIO_EBADF);
 }
@@ -639,7 +639,8 @@ remote_fileio_func_close (char *buf)
       remote_fileio_ioerror ();
       return;
     }
-  if ((fd = remote_fileio_map_fd ((int) num)) == FIO_FD_INVALID)
+  fd = remote_fileio_map_fd ((int) num);
+  if (fd == FIO_FD_INVALID)
     {
       remote_fileio_badfd ();
       return;
@@ -656,7 +657,7 @@ static void
 remote_fileio_func_read (char *buf)
 {
   long target_fd, num;
-  long long lnum;
+  LONGEST lnum;
   CORE_ADDR ptrval;
   int fd, ret, retlength;
   char *buffer;
@@ -669,7 +670,8 @@ remote_fileio_func_read (char *buf)
       remote_fileio_ioerror ();
       return;
     }
-  if ((fd = remote_fileio_map_fd ((int) target_fd)) == FIO_FD_INVALID)
+  fd = remote_fileio_map_fd ((int) target_fd);
+  if (fd == FIO_FD_INVALID)
     {
       remote_fileio_badfd ();
       return;
@@ -773,7 +775,7 @@ static void
 remote_fileio_func_write (char *buf)
 {
   long target_fd, num;
-  long long lnum;
+  LONGEST lnum;
   CORE_ADDR ptrval;
   int fd, ret, retlength;
   char *buffer;
@@ -785,7 +787,8 @@ remote_fileio_func_write (char *buf)
       remote_fileio_ioerror ();
       return;
     }
-  if ((fd = remote_fileio_map_fd ((int) target_fd)) == FIO_FD_INVALID)
+  fd = remote_fileio_map_fd ((int) target_fd);
+  if (fd == FIO_FD_INVALID)
     {
       remote_fileio_badfd ();
       return;
@@ -845,7 +848,7 @@ static void
 remote_fileio_func_lseek (char *buf)
 {
   long num;
-  long long lnum;
+  LONGEST lnum;
   int fd, flag;
   off_t offset, ret;
 
@@ -855,7 +858,8 @@ remote_fileio_func_lseek (char *buf)
       remote_fileio_ioerror ();
       return;
     }
-  if ((fd = remote_fileio_map_fd ((int) num)) == FIO_FD_INVALID)
+  fd = remote_fileio_map_fd ((int) num);
+  if (fd == FIO_FD_INVALID)
     {
       remote_fileio_badfd ();
       return;
@@ -933,10 +937,10 @@ remote_fileio_func_rename (char *buf)
     }
   
   /* Only operate on regular files and directories */
-  if ((!(of = stat (oldpath, &ost))
-       && !S_ISREG (ost.st_mode) && !S_ISDIR (ost.st_mode))
-      || (!(nf = stat (newpath, &nst))
-          && !S_ISREG (nst.st_mode) && !S_ISDIR (nst.st_mode)))
+  of = stat (oldpath, &ost);
+  nf = stat (newpath, &nst);
+  if ((!of && !S_ISREG (ost.st_mode) && !S_ISDIR (ost.st_mode))
+      || (!nf && !S_ISREG (nst.st_mode) && !S_ISDIR (nst.st_mode)))
     {
       remote_fileio_reply (-1, FILEIO_EACCES);
       return;
@@ -1032,7 +1036,7 @@ remote_fileio_func_stat (char *buf)
   CORE_ADDR ptrval;
   int ret, length, retlength;
   char *pathname;
-  long long lnum;
+  LONGEST lnum;
   struct stat st;
   struct fio_stat fst;
 
@@ -1094,7 +1098,7 @@ remote_fileio_func_fstat (char *buf)
   CORE_ADDR ptrval;
   int fd, ret, retlength;
   long target_fd;
-  long long lnum;
+  LONGEST lnum;
   struct stat st;
   struct fio_stat fst;
   struct timeval tv;
@@ -1105,7 +1109,8 @@ remote_fileio_func_fstat (char *buf)
       remote_fileio_ioerror ();
       return;
     }
-  if ((fd = remote_fileio_map_fd ((int) target_fd)) == FIO_FD_INVALID)
+  fd = remote_fileio_map_fd ((int) target_fd);
+  if (fd == FIO_FD_INVALID)
     {
       remote_fileio_badfd ();
       return;
@@ -1129,7 +1134,9 @@ remote_fileio_func_fstat (char *buf)
       st.st_rdev = 0;
       st.st_size = 0;
       st.st_blksize = 512;
+#if HAVE_STRUCT_STAT_ST_BLOCKS
       st.st_blocks = 0;
+#endif
       if (!gettimeofday (&tv, NULL))
        st.st_atime = st.st_mtime = st.st_ctime = tv.tv_sec;
       else
@@ -1161,7 +1168,7 @@ remote_fileio_func_fstat (char *buf)
 static void
 remote_fileio_func_gettimeofday (char *buf)
 {
-  long long lnum;
+  LONGEST lnum;
   CORE_ADDR ptrval;
   int ret, retlength;
   struct timeval tv;
This page took 0.029377 seconds and 4 git commands to generate.