annotate lib/open-safer.c @ 6116:045e3a398a10

Include <config.h>. Otherwise, we'd lose LARGEFILE support in any file using e.g. "fcntl--.h"
author Jim Meyering <jim@meyering.net>
date Thu, 25 Aug 2005 16:30:01 +0000
parents 6bfd38532cc3
children 96c32553b4c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6095
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* Invoke open, but avoid some glitches.
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
2 Copyright (C) 2005 Free Software Foundation, Inc.
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
3
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7 any later version.
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
12 GNU General Public License for more details.
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
13
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
15 along with this program; if not, write to the Free Software Foundation,
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
17
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18 /* Written by Paul Eggert. */
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
19
6116
045e3a398a10 Include <config.h>.
Jim Meyering <jim@meyering.net>
parents: 6095
diff changeset
20 #if HAVE_CONFIG_H
045e3a398a10 Include <config.h>.
Jim Meyering <jim@meyering.net>
parents: 6095
diff changeset
21 # include <config.h>
045e3a398a10 Include <config.h>.
Jim Meyering <jim@meyering.net>
parents: 6095
diff changeset
22 #endif
045e3a398a10 Include <config.h>.
Jim Meyering <jim@meyering.net>
parents: 6095
diff changeset
23
6095
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24 #include "fcntl-safer.h"
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26 #include <fcntl.h>
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27 #include <stdarg.h>
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28 #include "unistd-safer.h"
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
30 int
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
31 open_safer (char const *file, int flags, ...)
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
32 {
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33 mode_t mode = 0;
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35 if (flags & O_CREAT)
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36 {
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
37 va_list ap;
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
38 va_start (ap, flags);
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
40 /* Assume mode_t promotes to int if and only if it is smaller.
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
41 This assumption isn't guaranteed by the C standard, but we
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
42 don't know of any real-world counterexamples. */
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
43 mode = (sizeof (mode_t) < sizeof (int)
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
44 ? va_arg (ap, int)
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45 : va_arg (ap, mode_t));
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47 va_end (ap);
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48 }
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50 return fd_safer (open (file, flags, mode));
6bfd38532cc3 Sync from coreutils.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51 }