root/usr/src/cmd/mdb/common/mdb/mdb_ctf_open.c
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 * Copyright (c) 2015, Joyent, Inc.
 */

/*
 * libctf open/close interposition layer
 *
 * The mdb flavor of the interposition layer serves only to make ctf_bufopen
 * calls easier.  The kmdb flavor (the real reason for the layer) has more
 * intelligence behind mdb_ctf_open() than does this one.
 */

#include <mdb/mdb_ctf.h>
#include <libctf.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>

ctf_file_t *
mdb_ctf_open(const char *filename, int *errp)
{
        return (ctf_open(filename, errp));
}

void
mdb_ctf_close(ctf_file_t *fp)
{
        ctf_close(fp);
}

int
mdb_ctf_write(const char *filename, ctf_file_t *fp)
{
        int fd, ret;

        if ((fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0644)) < 0)
                return (errno);

        if (ctf_write(fp, fd) == CTF_ERR) {
                (void) close(fd);
                return (CTF_ERR);
        }

        ret = close(fd);
        if (ret != 0)
                ret = errno;
        return (ret);
}