diff options
Diffstat (limited to 'libio/iopopen.c')
-rw-r--r-- | libio/iopopen.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/libio/iopopen.c b/libio/iopopen.c index 6b2d7f5328..15c15023f7 100644 --- a/libio/iopopen.c +++ b/libio/iopopen.c @@ -101,6 +101,8 @@ struct _IO_proc_file }; typedef struct _IO_proc_file _IO_proc_file; +static struct _IO_jump_t _IO_wproc_jumps; + static struct _IO_proc_file *proc_file_chain; _IO_FILE * @@ -186,6 +188,7 @@ _IO_new_popen (command, mode) #ifdef _IO_MTSAFE_IO _IO_lock_t lock; #endif + struct _IO_wide_data wd; } *new_f; _IO_FILE *fp; @@ -196,7 +199,7 @@ _IO_new_popen (command, mode) new_f->fpx.file.file._lock = &new_f->lock; #endif fp = &new_f->fpx.file.file; - _IO_init (fp, 0); + _IO_no_init (fp, 0, 0, &new_f->wd, &_IO_wproc_jumps); _IO_JUMPS (fp) = &_IO_proc_jumps; _IO_new_file_init (fp); #if !_IO_UNIFIED_JUMPTABLES @@ -273,6 +276,29 @@ struct _IO_jump_t _IO_proc_jumps = { JUMP_INIT(imbue, _IO_default_imbue) }; +static struct _IO_jump_t _IO_wproc_jumps = { + JUMP_INIT_DUMMY, + JUMP_INIT(finish, _IO_new_file_finish), + JUMP_INIT(overflow, _IO_new_file_overflow), + JUMP_INIT(underflow, _IO_new_file_underflow), + JUMP_INIT(uflow, _IO_default_uflow), + JUMP_INIT(pbackfail, _IO_default_pbackfail), + JUMP_INIT(xsputn, _IO_new_file_xsputn), + JUMP_INIT(xsgetn, _IO_default_xsgetn), + JUMP_INIT(seekoff, _IO_new_file_seekoff), + JUMP_INIT(seekpos, _IO_default_seekpos), + JUMP_INIT(setbuf, _IO_new_file_setbuf), + JUMP_INIT(sync, _IO_new_file_sync), + JUMP_INIT(doallocate, _IO_file_doallocate), + JUMP_INIT(read, _IO_file_read), + JUMP_INIT(write, _IO_new_file_write), + JUMP_INIT(seek, _IO_file_seek), + JUMP_INIT(close, _IO_new_proc_close), + JUMP_INIT(stat, _IO_file_stat), + JUMP_INIT(showmanyc, _IO_default_showmanyc), + JUMP_INIT(imbue, _IO_default_imbue) +}; + #if defined PIC && DO_VERSIONING strong_alias (_IO_new_popen, __new_popen) default_symbol_version (_IO_new_popen, _IO_popen, GLIBC_2.1); |