int ndmca_data_get_env (struct ndm_session *sess) { struct ndmconn * conn = sess->plumb.data; struct ndm_control_agent *ca = &sess->control_acb; int rc; unsigned int i; ndmp9_pval * d_pv; ndmp9_pval * s_pv; NDMC_WITH_VOID_REQUEST(ndmp9_data_get_env, NDMP9VER) rc = NDMC_CALL(conn); if (rc) return rc; for (i = 0; i < reply->env.env_len; i++) { s_pv = &reply->env.env_val[i]; d_pv = &ca->job.result_env_tab.env[i]; d_pv->name = NDMOS_API_STRDUP (s_pv->name); d_pv->value = NDMOS_API_STRDUP (s_pv->value); } ca->job.result_env_tab.n_env = i; NDMC_FREE_REPLY(); NDMC_ENDWITH return rc; }
int jndex_fetch_post_backup_data_env (FILE *fp) { int rc; char buf[512]; char * p; char * q; rc = ndmbstf_first (fp, "DE ", buf, sizeof buf); if (rc <= 0) { return rc; /* error or not found */ } /* DE HIST=Yes */ while (buf[0] == 'D' && buf[1] == 'E' && buf[2] == ' ') { if (n_ji_environment >= NDM_MAX_ENV) { goto overflow; } p = &buf[2]; while (*p == ' ') p++; if (!strchr (p, '=')) { goto malformed; } p = NDMOS_API_STRDUP (p); q = strchr (p, '='); *q++ = 0; ji_environment[n_ji_environment].name = p; ji_environment[n_ji_environment].value = q; n_ji_environment++; rc = ndmbstf_getline (fp, buf, sizeof buf); if (rc <= 0) { break; } continue; malformed: ndmjob_log (1, "Malformed in -J%s: %s", J_index_file, buf); continue; overflow: ndmjob_log (1, "Overflow in -J%s: %s", J_index_file, buf); } return 0; }
/* * Add a new entry to an environment list table. * Return entry if caller want to modify it. */ struct ndm_env_entry * ndma_store_env_list (struct ndm_env_table *envtab, ndmp9_pval *pv) { struct ndm_env_entry * entry; if (envtab->n_env >= NDM_MAX_ENV) return NULL; entry = NDMOS_API_MALLOC (sizeof(struct ndm_env_entry)); if (!entry) return NULL; entry->pval.name = NDMOS_API_STRDUP (pv->name); if (!entry->pval.name) { NDMOS_API_FREE (entry); return NULL; } entry->pval.value = NDMOS_API_STRDUP (pv->value); if (!entry->pval.value) { NDMOS_API_FREE (entry->pval.name); NDMOS_API_FREE (entry); return NULL; } entry->next = NULL; if (envtab->tail) { envtab->tail->next = entry; envtab->tail = entry; } else { envtab->head = entry; envtab->tail = entry; } envtab->n_env++; return entry; }
/* * Update an entry in an environment list table. * If it doesn't exist add a new entry. * Return entry if caller want to modify it. */ struct ndm_env_entry * ndma_update_env_list (struct ndm_env_table *envtab, ndmp9_pval *pv) { struct ndm_env_entry * entry; for (entry = envtab->head; entry; entry = entry->next) { if (strcmp(entry->pval.name, pv->name) == 0) { NDMOS_API_FREE (entry->pval.value); entry->pval.value = NDMOS_API_STRDUP (pv->value); return entry; } } return ndma_store_env_list (envtab, pv); }
/* * Add a new entry to a nlist list table. * Return entry if caller want to modify it. */ struct ndm_nlist_entry * ndma_store_nlist (struct ndm_nlist_table *nlist, ndmp9_name *nl) { struct ndm_nlist_entry * entry; if (nlist->n_nlist >= NDM_MAX_NLIST) return NULL; entry = NDMOS_API_MALLOC (sizeof(struct ndm_nlist_entry)); if (!entry) return NULL; NDMOS_MACRO_ZEROFILL (entry); entry->name.original_path = NDMOS_API_STRDUP (nl->original_path); if (!entry->name.original_path) goto bail_out; entry->name.destination_path = NDMOS_API_STRDUP (nl->destination_path); if (!entry->name.destination_path) goto bail_out; entry->name.name = NDMOS_API_STRDUP (nl->name); if (!entry->name.name) goto bail_out; entry->name.other_name = NDMOS_API_STRDUP (nl->other_name); if (!entry->name.other_name) goto bail_out; entry->name.node = nl->node; entry->name.fh_info = nl->fh_info; entry->result_err = NDMP9_UNDEFINED_ERR; entry->result_count = 0; entry->next = NULL; if (nlist->tail) { nlist->tail->next = entry; nlist->tail = entry; } else { nlist->head = entry; nlist->tail = entry; } nlist->n_nlist++; return entry; bail_out: if (entry->name.other_name) NDMOS_API_FREE (entry->name.other_name); if (entry->name.name) NDMOS_API_FREE (entry->name.name); if (entry->name.destination_path) NDMOS_API_FREE (entry->name.destination_path); if (entry->name.original_path) NDMOS_API_FREE (entry->name.original_path); NDMOS_API_FREE (entry); return NULL; }