Example #1
0
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;
}
Example #2
0
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;
}
Example #3
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;
}
Example #4
0
/*
 * 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);
}
Example #5
0
/*
 * 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;
}