Ejemplo n.º 1
0
int pmi_simple_client_init (struct pmi_simple_client *pmi, int *spawned)
{
    int result = PMI_FAIL;
    unsigned int vers, subvers;
    char buf[SIMPLE_MAX_PROTO_LINE];
    int rc;

    if (dprintf (pmi->fd, "cmd=init pmi_version=1 pmi_subversion=1\n") < 0)
        goto done;
    if (dgetline (pmi->fd, buf, sizeof (buf)) < 0)
        goto done;
    if (keyval_parse_isword (buf, "cmd", "response_to_init") < 0)
        goto done;
    if (keyval_parse_int (buf, "rc", &rc) == 0 && rc != 0) {
        result = rc;
        goto done;
    }
    if (keyval_parse_uint (buf, "pmi_version", &vers) < 0
            || keyval_parse_uint (buf, "pmi_subversion", &subvers) < 0)
        goto done;
    if (vers != 1 || subvers != 1)
        goto done;

    if (dprintf (pmi->fd, "cmd=get_maxes\n") < 0)
        goto done;
    if (dgetline (pmi->fd, buf, sizeof (buf)) < 0)
        goto done;
    if (keyval_parse_isword (buf, "cmd", "maxes") < 0)
        goto done;
    if (keyval_parse_int (buf, "rc", &rc) == 0 && rc != 0) {
        result = rc;
        goto done;
    }
    if (keyval_parse_uint (buf, "kvsname_max", &pmi->kvsname_max) < 0
            || keyval_parse_uint (buf, "keylen_max", &pmi->keylen_max) < 0
            || keyval_parse_uint (buf, "vallen_max", &pmi->vallen_max) < 0)
        goto done;
    pmi->buflen = pmi->keylen_max + pmi->vallen_max + pmi->kvsname_max
                                  + SIMPLE_MAX_PROTO_OVERHEAD;
    if (!(pmi->buf = calloc (1, pmi->buflen))) {
        result = PMI_ERR_NOMEM;
        goto done;
    }
    pmi->initialized = 1;
    if (spawned)
        *spawned = pmi->spawned;
    result = PMI_SUCCESS;
done:
    return result;
}
Ejemplo n.º 2
0
int pmi_simple_client_init (struct pmi_simple_client *pmi, int *spawned)
{
    int result = PMI_FAIL;
    unsigned int vers, subvers;
    int rc;

    if (dprintf (pmi->fd, "cmd=init pmi_version=1 pmi_subversion=1\n") < 0)
        goto done;
    if (dgetline (pmi->fd, pmi->buf, sizeof (pmi->buf)) < 0)
        goto done;
    if (keyval_parse_isword (pmi->buf, "cmd", "response_to_init") < 0)
        goto done;
    if (keyval_parse_int (pmi->buf, "rc", &rc) == 0 && rc != 0) {
        result = rc;
        goto done;
    }
    if (keyval_parse_uint (pmi->buf, "pmi_version", &vers) < 0
            || keyval_parse_uint (pmi->buf, "pmi_subversion", &subvers) < 0)
        goto done;
    if (vers != 1 || subvers != 1)
        goto done;

    if (dprintf (pmi->fd, "cmd=get_maxes\n") < 0)
        goto done;
    if (dgetline (pmi->fd, pmi->buf, sizeof (pmi->buf)) < 0)
        goto done;
    if (keyval_parse_isword (pmi->buf, "cmd", "maxes") < 0)
        goto done;
    if (keyval_parse_int (pmi->buf, "rc", &rc) == 0 && rc != 0) {
        result = rc;
        goto done;
    }
    if (keyval_parse_uint (pmi->buf, "kvsname_max", &pmi->kvsname_max) < 0
            || keyval_parse_uint (pmi->buf, "keylen_max", &pmi->keylen_max) < 0
            || keyval_parse_uint (pmi->buf, "vallen_max", &pmi->vallen_max) < 0)
        goto done;
    pmi->initialized = 1;
    if (spawned)
        *spawned = pmi->spawned;
    result = PMI_SUCCESS;
done:
    return result;
}