|  | /* | 
|  | * This work is licensed under the terms of the GNU GPL, version 2 or later. | 
|  | * See the COPYING file in the top-level directory. | 
|  | */ | 
|  |  | 
|  | #include "qemu/osdep.h" | 
|  | #include "cutils.h" | 
|  | #include "qapi/error.h" | 
|  |  | 
|  | /** | 
|  | * qga_open_cloexec: | 
|  | * @name: the pathname to open | 
|  | * @flags: as in open() | 
|  | * @mode: as in open() | 
|  | * | 
|  | * A wrapper for open() function which sets O_CLOEXEC. | 
|  | * | 
|  | * On error, -1 is returned. | 
|  | */ | 
|  | int qga_open_cloexec(const char *name, int flags, mode_t mode) | 
|  | { | 
|  | int ret; | 
|  |  | 
|  | #ifdef O_CLOEXEC | 
|  | ret = open(name, flags | O_CLOEXEC, mode); | 
|  | #else | 
|  | ret = open(name, flags, mode); | 
|  | if (ret >= 0) { | 
|  | qemu_set_cloexec(ret); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | return ret; | 
|  | } |