diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2006-07-19 06:21:23 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@codesourcery.com> | 2006-07-19 06:21:23 +0000 |
commit | 86cc68a8de702025017c162b653ddef376bec88d (patch) | |
tree | 20264e962b5bfa83ed4e45c0e889e3fc59072e67 /gdb/remote-fileio.c | |
parent | 29e8a84408168aa7787f892c00c9458841c7feba (diff) | |
download | gdb-86cc68a8de702025017c162b653ddef376bec88d.zip gdb-86cc68a8de702025017c162b653ddef376bec88d.tar.gz gdb-86cc68a8de702025017c162b653ddef376bec88d.tar.bz2 |
* remote-fileio.c (remote_fileio_func_rename): Reorder to process
input buffer before reading memory.
(remote_fileio_func_stat): Likewise.
Diffstat (limited to 'gdb/remote-fileio.c')
-rw-r--r-- | gdb/remote-fileio.c | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/gdb/remote-fileio.c b/gdb/remote-fileio.c index 6089926..96c4d95 100644 --- a/gdb/remote-fileio.c +++ b/gdb/remote-fileio.c @@ -929,36 +929,39 @@ remote_fileio_func_lseek (char *buf) static void remote_fileio_func_rename (char *buf) { - CORE_ADDR ptrval; - int length, retlength; + CORE_ADDR old_ptr, new_ptr; + int old_len, new_len, retlength; char *oldpath, *newpath; int ret, of, nf; struct stat ost, nst; /* 1. Parameter: Ptr to oldpath / length incl. trailing zero */ - if (remote_fileio_extract_ptr_w_len (&buf, &ptrval, &length)) + if (remote_fileio_extract_ptr_w_len (&buf, &old_ptr, &old_len)) { remote_fileio_ioerror (); return; } - /* Request oldpath using 'm' packet */ - oldpath = alloca (length); - retlength = remote_read_bytes (ptrval, (gdb_byte *) oldpath, length); - if (retlength != length) + + /* 2. Parameter: Ptr to newpath / length incl. trailing zero */ + if (remote_fileio_extract_ptr_w_len (&buf, &new_ptr, &new_len)) { remote_fileio_ioerror (); return; } - /* 2. Parameter: Ptr to newpath / length incl. trailing zero */ - if (remote_fileio_extract_ptr_w_len (&buf, &ptrval, &length)) + + /* Request oldpath using 'm' packet */ + oldpath = alloca (old_len); + retlength = remote_read_bytes (old_ptr, (gdb_byte *) oldpath, old_len); + if (retlength != old_len) { remote_fileio_ioerror (); return; } + /* Request newpath using 'm' packet */ - newpath = alloca (length); - retlength = remote_read_bytes (ptrval, (gdb_byte *) newpath, length); - if (retlength != length) + newpath = alloca (new_len); + retlength = remote_read_bytes (new_ptr, (gdb_byte *) newpath, new_len); + if (retlength != new_len) { remote_fileio_ioerror (); return; @@ -1061,35 +1064,36 @@ remote_fileio_func_unlink (char *buf) static void remote_fileio_func_stat (char *buf) { - CORE_ADDR ptrval; - int ret, length, retlength; + CORE_ADDR statptr, nameptr; + int ret, namelength, retlength; char *pathname; LONGEST lnum; struct stat st; struct fio_stat fst; /* 1. Parameter: Ptr to pathname / length incl. trailing zero */ - if (remote_fileio_extract_ptr_w_len (&buf, &ptrval, &length)) + if (remote_fileio_extract_ptr_w_len (&buf, &nameptr, &namelength)) { remote_fileio_ioerror (); return; } - /* Request pathname using 'm' packet */ - pathname = alloca (length); - retlength = remote_read_bytes (ptrval, (gdb_byte *) pathname, length); - if (retlength != length) + + /* 2. Parameter: Ptr to struct stat */ + if (remote_fileio_extract_long (&buf, &lnum)) { remote_fileio_ioerror (); return; } - - /* 2. Parameter: Ptr to struct stat */ - if (remote_fileio_extract_long (&buf, &lnum)) + statptr = (CORE_ADDR) lnum; + + /* Request pathname using 'm' packet */ + pathname = alloca (namelength); + retlength = remote_read_bytes (nameptr, (gdb_byte *) pathname, namelength); + if (retlength != namelength) { remote_fileio_ioerror (); return; } - ptrval = (CORE_ADDR) lnum; remote_fio_no_longjmp = 1; ret = stat (pathname, &st); @@ -1105,12 +1109,13 @@ remote_fileio_func_stat (char *buf) remote_fileio_reply (-1, FILEIO_EACCES); return; } - if (ptrval) + if (statptr) { remote_fileio_to_fio_stat (&st, &fst); remote_fileio_to_fio_uint (0, fst.fst_dev); - retlength = remote_fileio_write_bytes (ptrval, (gdb_byte *) &fst, sizeof fst); + retlength = remote_fileio_write_bytes (statptr, + (gdb_byte *) &fst, sizeof fst); if (retlength != sizeof fst) { remote_fileio_return_errno (-1); |