xref: /qemu/qga/cutils.c (revision c12a9848)
10edbfbe3SMarc-André Lureau /*
20edbfbe3SMarc-André Lureau  * This work is licensed under the terms of the GNU GPL, version 2 or later.
30edbfbe3SMarc-André Lureau  * See the COPYING file in the top-level directory.
40edbfbe3SMarc-André Lureau  */
50edbfbe3SMarc-André Lureau 
6*c12a9848SMarkus Armbruster #include "qemu/osdep.h"
7*c12a9848SMarkus Armbruster #include "cutils.h"
80edbfbe3SMarc-André Lureau #include "qapi/error.h"
90edbfbe3SMarc-André Lureau 
100edbfbe3SMarc-André Lureau /**
110edbfbe3SMarc-André Lureau  * qga_open_cloexec:
120edbfbe3SMarc-André Lureau  * @name: the pathname to open
130edbfbe3SMarc-André Lureau  * @flags: as in open()
140edbfbe3SMarc-André Lureau  * @mode: as in open()
150edbfbe3SMarc-André Lureau  *
160edbfbe3SMarc-André Lureau  * A wrapper for open() function which sets O_CLOEXEC.
170edbfbe3SMarc-André Lureau  *
180edbfbe3SMarc-André Lureau  * On error, -1 is returned.
190edbfbe3SMarc-André Lureau  */
qga_open_cloexec(const char * name,int flags,mode_t mode)200edbfbe3SMarc-André Lureau int qga_open_cloexec(const char *name, int flags, mode_t mode)
210edbfbe3SMarc-André Lureau {
220edbfbe3SMarc-André Lureau     int ret;
230edbfbe3SMarc-André Lureau 
240edbfbe3SMarc-André Lureau #ifdef O_CLOEXEC
250edbfbe3SMarc-André Lureau     ret = open(name, flags | O_CLOEXEC, mode);
260edbfbe3SMarc-André Lureau #else
270edbfbe3SMarc-André Lureau     ret = open(name, flags, mode);
280edbfbe3SMarc-André Lureau     if (ret >= 0) {
290edbfbe3SMarc-André Lureau         qemu_set_cloexec(ret);
300edbfbe3SMarc-André Lureau     }
310edbfbe3SMarc-André Lureau #endif
320edbfbe3SMarc-André Lureau 
330edbfbe3SMarc-André Lureau     return ret;
340edbfbe3SMarc-André Lureau }
35