qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

passthrough_helpers.h (2043B)


      1 /*
      2  * FUSE: Filesystem in Userspace
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     16  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     23  * SUCH DAMAGE
     24  */
     25 
     26 /*
     27  * Creates files on the underlying file system in response to a FUSE_MKNOD
     28  * operation
     29  */
     30 static int mknod_wrapper(int dirfd, const char *path, const char *link,
     31                          int mode, dev_t rdev)
     32 {
     33     int res;
     34 
     35     if (S_ISREG(mode)) {
     36         res = openat(dirfd, path, O_CREAT | O_EXCL | O_WRONLY, mode);
     37         if (res >= 0) {
     38             res = close(res);
     39         }
     40     } else if (S_ISDIR(mode)) {
     41         res = mkdirat(dirfd, path, mode);
     42     } else if (S_ISLNK(mode) && link != NULL) {
     43         res = symlinkat(link, dirfd, path);
     44     } else if (S_ISFIFO(mode)) {
     45         res = mkfifoat(dirfd, path, mode);
     46     } else {
     47         res = mknodat(dirfd, path, mode, rdev);
     48     }
     49 
     50     return res;
     51 }