* dtable.cc (dtable::fixup_after_exec): Close any popen'ed file handles here.
* fhandler.h (fhandler_*::ispipe): New function. (fhandler_base::get_popen_pid): Define virtual function. (fhandler_*::isdevice): Make const. (fhandler_*::isfifo): Ditto.
This commit is contained in:
parent
4db8460fdb
commit
421ba492fa
|
@ -1,3 +1,11 @@
|
||||||
|
2009-08-18 Christopher Faylor <me+cygwin@cgf.cx>
|
||||||
|
|
||||||
|
* dtable.cc (dtable::fixup_after_exec): Close any popen'ed file handles here.
|
||||||
|
* fhandler.h (fhandler_*::ispipe): New function.
|
||||||
|
(fhandler_base::get_popen_pid): Define virtual function.
|
||||||
|
(fhandler_*::isdevice): Make const.
|
||||||
|
(fhandler_*::isfifo): Ditto.
|
||||||
|
|
||||||
2009-08-17 Christopher Faylor <me+cygwin@cgf.cx>
|
2009-08-17 Christopher Faylor <me+cygwin@cgf.cx>
|
||||||
|
|
||||||
* syscalls.cc (popen): Reorganize slightly for clarity. Fix a comment.
|
* syscalls.cc (popen): Reorganize slightly for clarity. Fix a comment.
|
||||||
|
|
|
@ -753,6 +753,8 @@ dtable::fixup_after_exec ()
|
||||||
}
|
}
|
||||||
release (i);
|
release (i);
|
||||||
}
|
}
|
||||||
|
else if (fh->get_popen_pid ())
|
||||||
|
close (i);
|
||||||
else if (i == 0)
|
else if (i == 0)
|
||||||
SetStdHandle (std_consts[i], fh->get_io_handle ());
|
SetStdHandle (std_consts[i], fh->get_io_handle ());
|
||||||
else if (i <= 2)
|
else if (i <= 2)
|
||||||
|
|
|
@ -342,8 +342,10 @@ class fhandler_base
|
||||||
virtual int tcsetpgrp (const pid_t pid);
|
virtual int tcsetpgrp (const pid_t pid);
|
||||||
virtual int tcgetpgrp ();
|
virtual int tcgetpgrp ();
|
||||||
virtual bool is_tty () const { return false; }
|
virtual bool is_tty () const { return false; }
|
||||||
virtual bool isdevice () { return true; }
|
virtual bool ispipe () const { return false; }
|
||||||
virtual bool isfifo () { return false; }
|
virtual pid_t get_popen_pid () const {return 0;}
|
||||||
|
virtual bool isdevice () const { return true; }
|
||||||
|
virtual bool isfifo () const { return false; }
|
||||||
virtual char *ptsname () { return NULL;}
|
virtual char *ptsname () { return NULL;}
|
||||||
virtual class fhandler_socket *is_socket () { return NULL; }
|
virtual class fhandler_socket *is_socket () { return NULL; }
|
||||||
virtual class fhandler_console *is_console () { return 0; }
|
virtual class fhandler_console *is_console () { return 0; }
|
||||||
|
@ -559,6 +561,8 @@ public:
|
||||||
OVERLAPPED *get_overlapped_buffer () {return &io_status;}
|
OVERLAPPED *get_overlapped_buffer () {return &io_status;}
|
||||||
void set_overlapped (OVERLAPPED *ov) {overlapped = ov;}
|
void set_overlapped (OVERLAPPED *ov) {overlapped = ov;}
|
||||||
|
|
||||||
|
bool ispipe() const { return true; }
|
||||||
|
|
||||||
void set_popen_pid (pid_t pid) {popen_pid = pid;}
|
void set_popen_pid (pid_t pid) {popen_pid = pid;}
|
||||||
pid_t get_popen_pid () const {return popen_pid;}
|
pid_t get_popen_pid () const {return popen_pid;}
|
||||||
_off64_t lseek (_off64_t offset, int whence);
|
_off64_t lseek (_off64_t offset, int whence);
|
||||||
|
@ -607,7 +611,7 @@ public:
|
||||||
int open (int, mode_t);
|
int open (int, mode_t);
|
||||||
int close ();
|
int close ();
|
||||||
int dup (fhandler_base *child);
|
int dup (fhandler_base *child);
|
||||||
bool isfifo () { return true; }
|
bool isfifo () const { return true; }
|
||||||
void set_close_on_exec (bool val);
|
void set_close_on_exec (bool val);
|
||||||
int __stdcall fstatvfs (struct statvfs *buf) __attribute__ ((regparm (2)));
|
int __stdcall fstatvfs (struct statvfs *buf) __attribute__ ((regparm (2)));
|
||||||
OVERLAPPED *get_overlapped () {return &io_status;}
|
OVERLAPPED *get_overlapped () {return &io_status;}
|
||||||
|
@ -723,7 +727,7 @@ class fhandler_disk_file: public fhandler_base
|
||||||
|
|
||||||
int open (int flags, mode_t mode);
|
int open (int flags, mode_t mode);
|
||||||
int lock (int, struct __flock64 *);
|
int lock (int, struct __flock64 *);
|
||||||
bool isdevice () { return false; }
|
bool isdevice () const { return false; }
|
||||||
int __stdcall fstat (struct __stat64 *buf) __attribute__ ((regparm (2)));
|
int __stdcall fstat (struct __stat64 *buf) __attribute__ ((regparm (2)));
|
||||||
int __stdcall fchmod (mode_t mode) __attribute__ ((regparm (1)));
|
int __stdcall fchmod (mode_t mode) __attribute__ ((regparm (1)));
|
||||||
int __stdcall fchown (__uid32_t uid, __gid32_t gid) __attribute__ ((regparm (2)));
|
int __stdcall fchown (__uid32_t uid, __gid32_t gid) __attribute__ ((regparm (2)));
|
||||||
|
|
Loading…
Reference in New Issue