annotate libinterp/corefcn/oct-procbuf.cc @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents 8dd5da409418
children e88a07dec498
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30125
diff changeset
3 // Copyright (C) 1996-2022 The Octave Project Developers
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
25
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21609
diff changeset
26 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
27 # include "config.h"
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
28 #endif
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
29
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
30 #include <cerrno>
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
31
25438
cb1606f78f6b prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
32 #include <iomanip>
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
33
22264
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
34 // FIXME: we would prefer to avoid including these directly in Octave
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
35 // sources, but eliminating them is complicated by the mingling of
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
36 // octave_procbuf_list and the calls to system library functions like
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
37 // execl.
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
38
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
39 #if defined (HAVE_UNISTD_H)
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
40 # if defined (HAVE_SYS_TYPES_H)
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
41 # include <sys/types.h>
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
42 # endif
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
43 # include <unistd.h>
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
44 #endif
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
45
3174
390d5e396682 [project @ 1998-05-04 16:36:17 by jwe]
jwe
parents: 3156
diff changeset
46 #include "lo-mappers.h"
390d5e396682 [project @ 1998-05-04 16:36:17 by jwe]
jwe
parents: 3156
diff changeset
47 #include "lo-utils.h"
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
48 #include "oct-procbuf.h"
5453
89f5979e8552 [project @ 2005-09-17 00:50:58 by jwe]
jwe
parents: 5451
diff changeset
49 #include "oct-syscalls.h"
6726
6b7ba4a31876 [project @ 2007-06-14 20:16:44 by jwe]
jwe
parents: 6725
diff changeset
50 #include "sysdep.h"
21910
4d723ba06b4a provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents: 21852
diff changeset
51 #include "unistd-wrappers.h"
3176
fccab8e7d35f [project @ 1998-05-18 20:33:31 by jwe]
jwe
parents: 3174
diff changeset
52 #include "variables.h"
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
53
3174
390d5e396682 [project @ 1998-05-04 16:36:17 by jwe]
jwe
parents: 3156
diff changeset
54 #include "defun.h"
21100
e39e05d90788 Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents: 19697
diff changeset
55 #include "errwarn.h"
3308
7ae1928ca623 [project @ 1999-10-21 08:57:11 by jwe]
jwe
parents: 3258
diff changeset
56 #include "utils.h"
3174
390d5e396682 [project @ 1998-05-04 16:36:17 by jwe]
jwe
parents: 3156
diff changeset
57
29991
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
58 OCTAVE_NAMESPACE_BEGIN
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
59
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21609
diff changeset
60 #if ! defined (SHELL_PATH)
21200
fcac5dbbf9ed maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents: 21100
diff changeset
61 # define SHELL_PATH "/bin/sh"
15756
ea1a1fb00744 Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents: 15195
diff changeset
62 #endif
ea1a1fb00744 Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents: 15195
diff changeset
63
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
64 // This class is based on the procbuf class from libg++, written by
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
65 // Per Bothner, Copyright (C) 1993 Free Software Foundation.
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
66
24118
f87c9f5c0f43 maint: silence several compiler warnings when building for Windows
Mike Miller <mtmiller@octave.org>
parents: 23795
diff changeset
67 #if (! (defined (__CYGWIN__) || defined (__MINGW32__) || defined (_MSC_VER)) \
f87c9f5c0f43 maint: silence several compiler warnings when building for Windows
Mike Miller <mtmiller@octave.org>
parents: 23795
diff changeset
68 && defined (HAVE_UNISTD_H))
f87c9f5c0f43 maint: silence several compiler warnings when building for Windows
Mike Miller <mtmiller@octave.org>
parents: 23795
diff changeset
69
29991
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
70 static procbuf *procbuf_list = nullptr;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
71
24118
f87c9f5c0f43 maint: silence several compiler warnings when building for Windows
Mike Miller <mtmiller@octave.org>
parents: 23795
diff changeset
72 #endif
f87c9f5c0f43 maint: silence several compiler warnings when building for Windows
Mike Miller <mtmiller@octave.org>
parents: 23795
diff changeset
73
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21609
diff changeset
74 #if ! defined (BUFSIZ)
21200
fcac5dbbf9ed maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents: 21100
diff changeset
75 # define BUFSIZ 1024
6094
86ee3cc8d8d2 [project @ 2006-10-26 01:18:33 by jwe]
jwe
parents: 5794
diff changeset
76 #endif
86ee3cc8d8d2 [project @ 2006-10-26 01:18:33 by jwe]
jwe
parents: 5794
diff changeset
77
29991
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
78 procbuf *
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
79 procbuf::open (const char *command, int mode)
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
80 {
6096
40212bfaed1d [project @ 2006-10-26 01:57:49 by jwe]
jwe
parents: 6094
diff changeset
81 #if defined (__CYGWIN__) || defined (__MINGW32__) || defined (_MSC_VER)
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
82
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
83 if (is_open ())
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
84 return 0;
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
85
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
86 m_f = (octave::popen (command, (mode & std::ios::in) ? "r" : "w"));
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
87
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
88 if (! m_f)
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
89 return 0;
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
90
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
91 // Oops... popen doesn't return the associated pid, so fake it for now
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
92
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
93 m_proc_pid = 1;
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
94
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
95 m_open_p = true;
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
96
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
97 if (mode & std::ios::out)
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
98 ::setvbuf (m_f, nullptr, _IOLBF, BUFSIZ);
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
99
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
100 return this;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
101
22264
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
102 #elif defined (HAVE_UNISTD_H)
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
103
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
104 int pipe_fds[2];
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
105
3544
71bd2d124119 [project @ 2000-02-02 21:02:31 by jwe]
jwe
parents: 3531
diff changeset
106 volatile int child_std_end = (mode & std::ios::in) ? 1 : 0;
3156
a494f93e60ff [project @ 1998-02-20 07:47:48 by jwe]
jwe
parents: 3147
diff changeset
107
3147
894d516b4a00 [project @ 1998-02-06 06:00:08 by jwe]
jwe
parents: 2847
diff changeset
108 volatile int parent_end, child_end;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
109
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
110 if (is_open ())
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23457
diff changeset
111 return nullptr;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
112
21727
e0da98857c19 rename octave::syscalls namespace to octave::sys
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
113 if (octave::sys::pipe (pipe_fds) < 0)
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23457
diff changeset
114 return nullptr;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
115
3544
71bd2d124119 [project @ 2000-02-02 21:02:31 by jwe]
jwe
parents: 3531
diff changeset
116 if (mode & std::ios::in)
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
117 {
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
118 parent_end = pipe_fds[0];
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
119 child_end = pipe_fds[1];
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
120 }
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
121 else
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
122 {
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
123 parent_end = pipe_fds[1];
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
124 child_end = pipe_fds[0];
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
125 }
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
126
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
127 m_proc_pid = ::fork ();
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
128
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
129 if (m_proc_pid == 0)
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
130 {
21910
4d723ba06b4a provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents: 21852
diff changeset
131 octave_close_wrapper (parent_end);
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
132
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
133 if (child_end != child_std_end)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
134 {
21910
4d723ba06b4a provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents: 21852
diff changeset
135 octave_dup2_wrapper (child_end, child_std_end);
4d723ba06b4a provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents: 21852
diff changeset
136 octave_close_wrapper (child_end);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
137 }
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
138
29991
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
139 while (procbuf_list)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
140 {
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
141 FILE *fp = procbuf_list->m_f;
3644
9add655e8b8c [project @ 2000-03-24 11:58:50 by jwe]
jwe
parents: 3632
diff changeset
142
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
143 if (fp)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
144 {
21942
aab79a1885cc limit gnulib headers to liboctave/wrappers directory
John W. Eaton <jwe@octave.org>
parents: 21910
diff changeset
145 std::fclose (fp);
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23457
diff changeset
146 fp = nullptr;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
147 }
3644
9add655e8b8c [project @ 2000-03-24 11:58:50 by jwe]
jwe
parents: 3632
diff changeset
148
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
149 procbuf_list = procbuf_list->m_next;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
150 }
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
151
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23457
diff changeset
152 execl (SHELL_PATH, "sh", "-c", command, static_cast<void *> (nullptr));
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
153
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
154 exit (127);
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
155 }
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
156
21910
4d723ba06b4a provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents: 21852
diff changeset
157 octave_close_wrapper (child_end);
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
158
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
159 if (m_proc_pid < 0)
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
160 {
21910
4d723ba06b4a provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents: 21852
diff changeset
161 octave_close_wrapper (parent_end);
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23457
diff changeset
162 return nullptr;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
163 }
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
164
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
165 m_f = (::fdopen (parent_end, (mode & std::ios::in) ? "r" : "w"));
3631
0b6b55fd0a5c [project @ 2000-03-23 09:16:36 by jwe]
jwe
parents: 3544
diff changeset
166
3649
3a067b216fd6 [project @ 2000-03-31 06:02:44 by jwe]
jwe
parents: 3644
diff changeset
167 if (mode & std::ios::out)
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
168 ::setvbuf (m_f, nullptr, _IOLBF, BUFSIZ);
3649
3a067b216fd6 [project @ 2000-03-31 06:02:44 by jwe]
jwe
parents: 3644
diff changeset
169
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
170 m_open_p = true;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
171
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
172 m_next = procbuf_list;
29991
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
173 procbuf_list = this;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
174
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
175 return this;
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
176
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
177 #else
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
178
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
179 return 0;
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
180
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
181 #endif
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
182 }
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
183
29991
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
184 procbuf *
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
185 procbuf::close (void)
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
186 {
6096
40212bfaed1d [project @ 2006-10-26 01:57:49 by jwe]
jwe
parents: 6094
diff changeset
187 #if defined (__CYGWIN__) || defined (__MINGW32__) || defined (_MSC_VER)
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
188
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
189 if (m_f)
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
190 {
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
191 m_wstatus = octave::pclose (m_f);
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
192 m_f = 0;
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
193 }
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
194
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
195 m_open_p = false;
4472
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
196
f52db9e1296a [project @ 2003-07-29 18:03:03 by jwe]
jwe
parents: 4233
diff changeset
197 return this;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
198
22264
9b78fda78300 fix build failure for --without-z (bug #48757)
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
199 #elif defined (HAVE_UNISTD_H)
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
200
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
201 if (m_f)
3644
9add655e8b8c [project @ 2000-03-24 11:58:50 by jwe]
jwe
parents: 3632
diff changeset
202 {
9add655e8b8c [project @ 2000-03-24 11:58:50 by jwe]
jwe
parents: 3632
diff changeset
203 pid_t wait_pid;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
204
3644
9add655e8b8c [project @ 2000-03-24 11:58:50 by jwe]
jwe
parents: 3632
diff changeset
205 int status = -1;
9add655e8b8c [project @ 2000-03-24 11:58:50 by jwe]
jwe
parents: 3632
diff changeset
206
29991
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
207 for (procbuf **ptr = &procbuf_list;
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23457
diff changeset
208 *ptr != nullptr;
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
209 ptr = &(*ptr)->m_next)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
210 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
211 if (*ptr == this)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
212 {
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
213 *ptr = (*ptr)->m_next;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
214 status = 0;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
215 break;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
216 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
217 }
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
218
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
219 if (status == 0 && std::fclose (m_f) == 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
220 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
221 using namespace std;
3531
97cf542676e1 [project @ 2000-02-02 11:30:40 by jwe]
jwe
parents: 3503
diff changeset
222
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
223 do
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
224 {
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
225 wait_pid = octave::sys::waitpid (m_proc_pid, &m_wstatus, 0);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
226 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
227 while (wait_pid == -1 && errno == EINTR);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
228 }
3644
9add655e8b8c [project @ 2000-03-24 11:58:50 by jwe]
jwe
parents: 3632
diff changeset
229
30125
8dd5da409418 maint: use "m_" prefix for member variables in file c-file-ptr-stream.h.
Rik <rik@octave.org>
parents: 30124
diff changeset
230 m_f = nullptr;
3631
0b6b55fd0a5c [project @ 2000-03-23 09:16:36 by jwe]
jwe
parents: 3544
diff changeset
231 }
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
232
30124
041dbcd1f93b maint: use "m_" prefix for member variables in class procbuf.
Rik <rik@octave.org>
parents: 29991
diff changeset
233 m_open_p = false;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
234
3631
0b6b55fd0a5c [project @ 2000-03-23 09:16:36 by jwe]
jwe
parents: 3544
diff changeset
235 return this;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
236
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
237 #else
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
238
3631
0b6b55fd0a5c [project @ 2000-03-23 09:16:36 by jwe]
jwe
parents: 3544
diff changeset
239 return 0;
2094
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
240
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
241 #endif
a23645b0364e [project @ 1996-04-28 09:00:07 by jwe]
jwe
parents:
diff changeset
242 }
29991
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
243
3988112c7116 move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
244 OCTAVE_NAMESPACE_END