view open.c @ 0:6ce4443e7545

Add the draft of an API to collect statistics on LXC
author Louis Opter <kalessin@kalessin.fr>
date Wed, 29 Dec 2010 23:28:14 +0100
parents
children 8339ab15527d
line wrap: on
line source

#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <mntent.h>
#include <stdlib.h>
#include <string.h>

#include "_lxcstats.h"
#include "lxcstats.h"

static char *
lxcst_cgroup_mount_point(void)
{
    FILE            *mtab;
    struct mntent   mntbuf;
    char            strbuf[1024];
    bool            found = false;

    mtab = fopen("/etc/mtab", "r");
    if (!mtab)
        return (NULL);

    while (getmntent_r(mtab, &mntbuf, strbuf, sizeof(strbuf))) {
        if (!strcmp(mntbuf.mnt_type, "cgroup")) {
            found = true;
            break ;
        }
    }

    fclose(mtab);

    if (found)
        return (strdup(mntbuf.mnt_dir));

    errno = ENOENT;
    return (NULL);
}

lxcst_handle    *lxcst_open(void)
{
    struct _lxcst_controller    *c;

    c = calloc(1, sizeof(*c));
    if (!c)
        return (NULL);

    c->cgroup_dir = lxcst_cgroup_mount_point();
    if (!c->cgroup_dir)
        goto free_controller;

    return (c);

free_controller:
    free(c);
    return (NULL);
}