This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! http://www.opengroup.org/onlinepubs/009695399/functions/popen.html has: Pipe streams are byte-oriented. and Issue 5 A statement is added to the DESCRIPTION indicating that pipe streams are byte-oriented. 2004-07-23 Jakub Jelinek <jakub@redhat.com> [BZ #282] * libio/iopopen.c (_IO_new_popen): Use _IO_init instead of _IO_no_init. Remove wd from struct locked_FILE. (_IO_wproc_jumps): Remove. Reported by Andrew Josey <a.josey@opengroup.org>. * stdio-common/Makefile (tests): Add tst-popen. * stdio-common/tst-popen.c: New test. --- libc/libio/iopopen.c.jj 2004-02-20 16:36:30.000000000 +0100 +++ libc/libio/iopopen.c 2004-07-23 16:52:13.745182557 +0200 @@ -106,7 +106,6 @@ struct _IO_proc_file typedef struct _IO_proc_file _IO_proc_file; static const struct _IO_jump_t _IO_proc_jumps; -static const struct _IO_jump_t _IO_wproc_jumps; static struct _IO_proc_file *proc_file_chain; @@ -213,7 +212,6 @@ _IO_new_popen (command, mode) #ifdef _IO_MTSAFE_IO _IO_lock_t lock; #endif - struct _IO_wide_data wd; } *new_f; _IO_FILE *fp; @@ -224,7 +222,7 @@ _IO_new_popen (command, mode) new_f->fpx.file.file._lock = &new_f->lock; #endif fp = &new_f->fpx.file.file; - _IO_no_init (fp, 0, 0, &new_f->wd, &_IO_wproc_jumps); + _IO_init (fp, 0); _IO_JUMPS (&new_f->fpx.file) = &_IO_proc_jumps; _IO_new_file_init (&new_f->fpx.file); #if !_IO_UNIFIED_JUMPTABLES @@ -309,29 +307,6 @@ static const struct _IO_jump_t _IO_proc_ JUMP_INIT(imbue, _IO_default_imbue) }; -static const 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, INTUSE(_IO_default_uflow)), - JUMP_INIT(pbackfail, INTUSE(_IO_default_pbackfail)), - JUMP_INIT(xsputn, _IO_new_file_xsputn), - JUMP_INIT(xsgetn, INTUSE(_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, INTUSE(_IO_file_doallocate)), - JUMP_INIT(read, INTUSE(_IO_file_read)), - JUMP_INIT(write, _IO_new_file_write), - JUMP_INIT(seek, INTUSE(_IO_file_seek)), - JUMP_INIT(close, _IO_new_proc_close), - JUMP_INIT(stat, INTUSE(_IO_file_stat)), - JUMP_INIT(showmanyc, _IO_default_showmanyc), - JUMP_INIT(imbue, _IO_default_imbue) -}; - strong_alias (_IO_new_popen, __new_popen) versioned_symbol (libc, _IO_new_popen, _IO_popen, GLIBC_2_1); versioned_symbol (libc, __new_popen, popen, GLIBC_2_1); --- libc/stdio-common/Makefile.jj 2004-01-12 10:52:38.000000000 +0100 +++ libc/stdio-common/Makefile 2004-07-23 16:37:15.853516991 +0200 @@ -52,7 +52,8 @@ tests := tstscanf test_rdwr test-popen t scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10 \ scanf11 scanf12 tst-tmpnam tst-cookie tst-obprintf tst-sscanf \ tst-swprintf tst-fseek tst-fmemopen test-vfprintf tst-gets \ - tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 bug15 + tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 bug15 \ + tst-popen test-srcs = tst-unbputc tst-printf --- libc/stdio-common/tst-popen.c.jj 2004-07-23 16:22:12.521611310 +0200 +++ libc/stdio-common/tst-popen.c 2004-07-23 16:42:30.832372281 +0200 @@ -0,0 +1,72 @@ +/* Copyright (C) 2004 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdio.h> +#include <wchar.h> + +static int +do_test (void) +{ + FILE *f = popen ("echo test", "r"); + int result = 0, ret; + char *line = NULL; + size_t len = 0; + + if (f == NULL) + { + printf ("popen failed %m"); + return 1; + } + + /* POSIX says that pipe streams are byte-oriented. */ + if (fwide (f, 0) >= 0) + { + puts ("popen did not return byte-oriented stream"); + result = 1; + } + + if (getline (&line, &len, f) != 5) + { + puts ("could not read line from popen"); + result = 1; + } + else if (strcmp (line, "test\n") != 0) + { + printf ("read \"%s\"\n", line); + result = 1; + } + + if (getline (&line, &len, f) != -1) + { + puts ("second getline did not return -1"); + result = 1; + } + + ret = pclose (f); + if (ret != 0) + { + printf ("pclose returned %d\n", ret); + result = 1; + } + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |