static int local_open2(FsContext *fs_ctx, V9fsPath *dir_path, const char *name,

                       int flags, FsCred *credp, V9fsFidOpenState *fs)

{

    char *path;

    int fd = -1;

    int err = -1;

    int serrno = 0;

    V9fsString fullname;

    char buffer[PATH_MAX];



    /*

     * Mark all the open to not follow symlinks

     */

    flags |= O_NOFOLLOW;



    v9fs_string_init(&fullname);

    v9fs_string_sprintf(&fullname, "%s/%s", dir_path->data, name);

    path = fullname.data;



    /* Determine the security model */

    if (fs_ctx->export_flags & V9FS_SM_MAPPED) {

        fd = open(rpath(fs_ctx, path, buffer), flags, SM_LOCAL_MODE_BITS);

        if (fd == -1) {

            err = fd;

            goto out;

        }

        credp->fc_mode = credp->fc_mode|S_IFREG;

        /* Set cleint credentials in xattr */

        err = local_set_xattr(rpath(fs_ctx, path, buffer), credp);

        if (err == -1) {

            serrno = errno;

            goto err_end;

        }

    } else if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE) {

        fd = open(rpath(fs_ctx, path, buffer), flags, SM_LOCAL_MODE_BITS);

        if (fd == -1) {

            err = fd;

            goto out;

        }

        credp->fc_mode = credp->fc_mode|S_IFREG;

        /* Set client credentials in .virtfs_metadata directory files */

        err = local_set_mapped_file_attr(fs_ctx, path, credp);

        if (err == -1) {

            serrno = errno;

            goto err_end;

        }

    } else if ((fs_ctx->export_flags & V9FS_SM_PASSTHROUGH) ||

               (fs_ctx->export_flags & V9FS_SM_NONE)) {

        fd = open(rpath(fs_ctx, path, buffer), flags, credp->fc_mode);

        if (fd == -1) {

            err = fd;

            goto out;

        }

        err = local_post_create_passthrough(fs_ctx, path, credp);

        if (err == -1) {

            serrno = errno;

            goto err_end;

        }

    }

    err = fd;

    fs->fd = fd;

    goto out;



err_end:

    close(fd);

    remove(rpath(fs_ctx, path, buffer));

    errno = serrno;

out:

    v9fs_string_free(&fullname);

    return err;

}

static int local_open2(FsContext *fs_ctx, V9fsPath *dir_path, const char *name,

                       int flags, FsCred *credp, V9fsFidOpenState *fs)

{

    char *path;

    int fd = -1;

    int err = -1;

    int serrno = 0;

    V9fsString fullname;

    char buffer[PATH_MAX];



    





    flags |= O_NOFOLLOW;



    v9fs_string_init(&fullname);

    v9fs_string_sprintf(&fullname, "%s/%s", dir_path->data, name);

    path = fullname.data;



    

    if (fs_ctx->export_flags & V9FS_SM_MAPPED) {

        fd = open(rpath(fs_ctx, path, buffer), flags, SM_LOCAL_MODE_BITS);

        if (fd == -1) {

            err = fd;

            goto out;

        }

        credp->fc_mode = credp->fc_mode|S_IFREG;

        

        err = local_set_xattr(rpath(fs_ctx, path, buffer), credp);

        if (err == -1) {

            serrno = errno;

            goto err_end;

        }

    } else if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE) {

        fd = open(rpath(fs_ctx, path, buffer), flags, SM_LOCAL_MODE_BITS);

        if (fd == -1) {

            err = fd;

            goto out;

        }

        credp->fc_mode = credp->fc_mode|S_IFREG;

        

        err = local_set_mapped_file_attr(fs_ctx, path, credp);

        if (err == -1) {

            serrno = errno;

            goto err_end;

        }

    } else if ((fs_ctx->export_flags & V9FS_SM_PASSTHROUGH) ||

               (fs_ctx->export_flags & V9FS_SM_NONE)) {

        fd = open(rpath(fs_ctx, path, buffer), flags, credp->fc_mode);

        if (fd == -1) {

            err = fd;

            goto out;

        }

        err = local_post_create_passthrough(fs_ctx, path, credp);

        if (err == -1) {

            serrno = errno;

            goto err_end;

        }

    }

    err = fd;

    fs->fd = fd;

    goto out;



err_end:

    close(fd);

    remove(rpath(fs_ctx, path, buffer));

    errno = serrno;

out:

    v9fs_string_free(&fullname);

    return err;

}

static int FUNC_0(FsContext *VAR_0, V9fsPath *VAR_1, const char *VAR_2,

                       int VAR_3, FsCred *VAR_4, V9fsFidOpenState *VAR_5)

{

    char *VAR_6;

    int VAR_7 = -1;

    int VAR_8 = -1;

    int VAR_9 = 0;

    V9fsString fullname;

    char VAR_10[PATH_MAX];



    





    VAR_3 |= O_NOFOLLOW;



    v9fs_string_init(&fullname);

    v9fs_string_sprintf(&fullname, "%s/%s", VAR_1->data, VAR_2);

    VAR_6 = fullname.data;



    

    if (VAR_0->export_flags & V9FS_SM_MAPPED) {

        VAR_7 = open(rpath(VAR_0, VAR_6, VAR_10), VAR_3, SM_LOCAL_MODE_BITS);

        if (VAR_7 == -1) {

            VAR_8 = VAR_7;

            goto out;

        }

        VAR_4->fc_mode = VAR_4->fc_mode|S_IFREG;

        

        VAR_8 = local_set_xattr(rpath(VAR_0, VAR_6, VAR_10), VAR_4);

        if (VAR_8 == -1) {

            VAR_9 = errno;

            goto err_end;

        }

    } else if (VAR_0->export_flags & V9FS_SM_MAPPED_FILE) {

        VAR_7 = open(rpath(VAR_0, VAR_6, VAR_10), VAR_3, SM_LOCAL_MODE_BITS);

        if (VAR_7 == -1) {

            VAR_8 = VAR_7;

            goto out;

        }

        VAR_4->fc_mode = VAR_4->fc_mode|S_IFREG;

        

        VAR_8 = local_set_mapped_file_attr(VAR_0, VAR_6, VAR_4);

        if (VAR_8 == -1) {

            VAR_9 = errno;

            goto err_end;

        }

    } else if ((VAR_0->export_flags & V9FS_SM_PASSTHROUGH) ||

               (VAR_0->export_flags & V9FS_SM_NONE)) {

        VAR_7 = open(rpath(VAR_0, VAR_6, VAR_10), VAR_3, VAR_4->fc_mode);

        if (VAR_7 == -1) {

            VAR_8 = VAR_7;

            goto out;

        }

        VAR_8 = local_post_create_passthrough(VAR_0, VAR_6, VAR_4);

        if (VAR_8 == -1) {

            VAR_9 = errno;

            goto err_end;

        }

    }

    VAR_8 = VAR_7;

    VAR_5->VAR_7 = VAR_7;

    goto out;



err_end:

    close(VAR_7);

    remove(rpath(VAR_0, VAR_6, VAR_10));

    errno = VAR_9;

out:

    v9fs_string_free(&fullname);

    return VAR_8;

}

static int FUNC_0(FsContext *VAR_0, V9fsPath *VAR_1, const char *VAR_2,
int VAR_3, FsCred *VAR_4, V9fsFidOpenState *VAR_5)
{ char *VAR_6; int VAR_7 = -1; int VAR_8 = -1; int VAR_9 = 0; V9fsString fullname; char VAR_10[PATH_MAX]; VAR_3 |= O_NOFOLLOW; v9fs_string_init(&fullname); v9fs_string_sprintf(&fullname, "%s/%s", VAR_1->data, VAR_2); VAR_6 = fullname.data; if (VAR_0->export_flags & V9FS_SM_MAPPED) { VAR_7 = open(rpath(VAR_0, VAR_6, VAR_10), VAR_3, SM_LOCAL_MODE_BITS); if (VAR_7 == -1) { VAR_8 = VAR_7; goto out; } VAR_4->fc_mode = VAR_4->fc_mode|S_IFREG; VAR_8 = local_set_xattr(rpath(VAR_0, VAR_6, VAR_10), VAR_4); if (VAR_8 == -1) { VAR_9 = errno; goto err_end; } } else if (VAR_0->export_flags & V9FS_SM_MAPPED_FILE) { VAR_7 = open(rpath(VAR_0, VAR_6, VAR_10), VAR_3, SM_LOCAL_MODE_BITS); if (VAR_7 == -1) { VAR_8 = VAR_7; goto out; } VAR_4->fc_mode = VAR_4->fc_mode|S_IFREG; VAR_8 = local_set_mapped_file_attr(VAR_0, VAR_6, VAR_4); if (VAR_8 == -1) { VAR_9 = errno; goto err_end; } } else if ((VAR_0->export_flags & V9FS_SM_PASSTHROUGH) || (VAR_0->export_flags & V9FS_SM_NONE)) { VAR_7 = open(rpath(VAR_0, VAR_6, VAR_10), VAR_3, VAR_4->fc_mode); if (VAR_7 == -1) { VAR_8 = VAR_7; goto out; } VAR_8 = local_post_create_passthrough(VAR_0, VAR_6, VAR_4); if (VAR_8 == -1) { VAR_9 = errno; goto err_end; } } VAR_8 = VAR_7; VAR_5->VAR_7 = VAR_7; goto out; err_end:
close(VAR_7); remove(rpath(VAR_0, VAR_6, VAR_10)); errno = VAR_9; out:
v9fs_string_free(&fullname); return VAR_8; }