Exemplo n.º 1
0
    int
alcove_encode_constant(char *buf, size_t len, int *index, char *name,
        const alcove_constant_t *constants)
{
    long long val = 0;

    if (alcove_lookup_constant(name, &val, constants) < 0)
        return alcove_encode_atom(buf, len, index, "unknown");

    return alcove_encode_ulonglong(buf, len, index, val);
}
Exemplo n.º 2
0
/*
 * getrlimit(2)
 *
 */
    ssize_t
alcove_sys_getrlimit(alcove_state_t *ap, const char *arg, size_t len,
        char *reply, size_t rlen)
{
    int index = 0;
    int rindex = 0;

    int resource = 0;
    struct rlimit rlim = {0};
    int rv = 0;

    /* resource */
    switch (alcove_decode_define(arg, len, &index, &resource,
                alcove_rlimit_constants)) {
        case 0:
            break;
        case 1:
            return alcove_mk_error(reply, rlen, "unsupported");
        default:
            return -1;
    }

    rv = getrlimit(resource, &rlim);

    if (rv < 0)
        return  alcove_mk_errno(reply, rlen, errno);

    ALCOVE_ERR(alcove_encode_version(reply, rlen, &rindex));
    ALCOVE_ERR(alcove_encode_tuple_header(reply, rlen, &rindex, 2));
    ALCOVE_ERR(alcove_encode_atom(reply, rlen, &rindex, "ok"));
    ALCOVE_ERR(alcove_encode_tuple_header(reply, rlen, &rindex, 3));
    ALCOVE_ERR(alcove_encode_atom(reply, rlen, &rindex, "alcove_rlimit"));
    ALCOVE_ERR(alcove_encode_ulonglong(reply, rlen, &rindex, rlim.rlim_cur));
    ALCOVE_ERR(alcove_encode_ulonglong(reply, rlen, &rindex, rlim.rlim_max));

    return rindex;
}