pipe-safer.c revision cea198a11f15a2eb071d98491ca9a8bc8cebfbc4
1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Invoke pipe, but avoid some glitches.
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Copyright (C) 2005 Free Software Foundation, Inc.
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   This program is free software; you can redistribute it and/or modify
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   it under the terms of the GNU General Public License as published by
6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   the Free Software Foundation; either version 2, or (at your option)
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   any later version.
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   This program is distributed in the hope that it will be useful,
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   but WITHOUT ANY WARRANTY; without even the implied warranty of
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   GNU General Public License for more details.
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   You should have received a copy of the GNU General Public License
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   along with this program; if not, write to the Free Software Foundation,
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Written by Jim Meyering.  */
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifdef HAVE_CONFIG_H
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include <config.h>
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "unistd-safer.h"
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <unistd.h>
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Like pipe, but ensure that neither of the file descriptors is
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO.  */
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectpipe_safer (int fd[2])
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int fail = pipe (fd);
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (fail)
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return fail;
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int i;
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    for (i = 0; i < 2; i++)
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	int f = fd_safer (fd[i]);
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	if (f < 0)
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  return -1;
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	fd[i] = f;
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return 0;
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
51