• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/gettext-0.17/gettext-tools/gnulib-lib/
1/* Open a descriptor to a file.
2   Copyright (C) 2007 Free Software Foundation, Inc.
3
4   This program is free software: you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation; either version 3 of the License, or
7   (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
18
19#include <config.h>
20
21/* Specification.  */
22#include <fcntl.h>
23
24/* If the fchdir replacement is used, open() is defined in fchdir.c.  */
25#ifndef FCHDIR_REPLACEMENT
26
27# include <stdarg.h>
28# include <string.h>
29# include <sys/types.h>
30# include <sys/stat.h>
31
32int
33open (const char *filename, int flags, ...)
34# undef open
35{
36  mode_t mode;
37
38  mode = 0;
39  if (flags & O_CREAT)
40    {
41      va_list arg;
42      va_start (arg, flags);
43
44      /* If mode_t is narrower than int, use the promoted type (int),
45	 not mode_t.  Use sizeof to guess whether mode_t is narrower;
46	 we don't know of any practical counterexamples.  */
47      mode = (sizeof (mode_t) < sizeof (int)
48	      ? va_arg (arg, int)
49	      : va_arg (arg, mode_t));
50
51      va_end (arg);
52    }
53
54# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
55  if (strcmp (filename, "/dev/null") == 0)
56    filename = "NUL";
57# endif
58
59  return open (filename, flags, mode);
60}
61#endif
62