Пример #1
0
void ConductHeader::on_line(std::string& line){
	long idx;
	char fromname[MAX_NAME_LENGTH], toname[MAX_NAME_LENGTH];
	long fromnode, tonode;
	double cond;

	/* 1,    ADCE.1,    NPANEL.13,    14.025         $ Contact */
	if(sscanf(line.c_str(), format, &idx, &fromname, &fromnode, &toname, &tonode, &cond) != 6){
		throw CruncherException("node parse failed for "+line);
	}
	system.on_conduct(idx, trim_name(fromname), fromnode, trim_name(toname), tonode, cond);
}
Пример #2
0
static int parse_line_new(gds_keyval_parse_state_t first_val)
{
    gds_keyval_parse_state_t val;
    char *tmp;
    int rc;

    val = first_val;
    while (GDS_UTIL_KEYVAL_PARSE_NEWLINE != val && GDS_UTIL_KEYVAL_PARSE_DONE != val) {
        rc = save_param_name ();
        if (GDS_SUCCESS != rc) {
            return rc;
        }

        if (GDS_UTIL_KEYVAL_PARSE_MCAVAR == val) {
            trim_name (key_buffer, "-mca", NULL);
            trim_name (key_buffer, "--mca", NULL);

            val = gds_util_keyval_yylex();
            if (GDS_UTIL_KEYVAL_PARSE_VALUE == val) {
                if (NULL != gds_util_keyval_yytext) {
                    tmp = strdup(gds_util_keyval_yytext);
                    if ('\'' == tmp[0] || '\"' == tmp[0]) {
                        trim_name (tmp, "\'", "\'");
                        trim_name (tmp, "\"", "\"");
                    }
                    keyval_callback(key_buffer, tmp);
                    free(tmp);
                }
            } else {
                parse_error(4);
                return GDS_ERROR;
            }
        } else if (GDS_UTIL_KEYVAL_PARSE_ENVEQL == val) {
            trim_name (key_buffer, "-x", "=");
            trim_name (key_buffer, "--x", NULL);

            val = gds_util_keyval_yylex();
            if (GDS_UTIL_KEYVAL_PARSE_VALUE == val) {
                add_to_env_str(key_buffer, gds_util_keyval_yytext);
            } else {
                parse_error(5);
                return GDS_ERROR;
            }
        } else if (GDS_UTIL_KEYVAL_PARSE_ENVVAR == val) {
            trim_name (key_buffer, "-x", "=");
            trim_name (key_buffer, "--x", NULL);
            add_to_env_str(key_buffer, NULL);
        } else {
            /* we got something unexpected.  Bonk! */
            parse_error(6);
            return GDS_ERROR;
        }

        val = gds_util_keyval_yylex();
    }

    return GDS_SUCCESS;
}
Пример #3
0
/*
 * ndmp_restore_extract_params
 *
 * Go through the restore parameters and check them and extract them
 * by setting NLP flags and other values.
 *
 * Parameters:
 *
 * Returns:
 *   0: on success
 *  -1: otherwise
 */
int
ndmp_restore_extract_params(ndmpd_session_t *session,
    ndmpd_module_params_t *params)
{
	char *bkpath, *rspath;
	ndmp_lbr_params_t *nlp;

	if ((nlp = ndmp_get_nlp(session)) == NULL) {
		NDMP_LOG(LOG_DEBUG, "nlp == NULL");
		return (-1);
	}

	/* Extract directory from where the backup was made. */
	if ((bkpath = get_backup_path_v2(params)) == NULL)
		return (NDMP_ILLEGAL_ARGS_ERR);

	nlp->nlp_restore_bk_path = bkpath;

	/* The number of the selections. */
	if ((nlp->nlp_nfiles = get_nfiles(session, params)) == 0)
		return (NDMP_ILLEGAL_ARGS_ERR);

	NDMP_LOG(LOG_DEBUG, "nfiles: %d", nlp->nlp_nfiles);

	if ((rspath = get_restore_dest(params)) == NULL)
		return (NDMP_ILLEGAL_ARGS_ERR);

	if (fs_is_rdonly(rspath)) {
		MOD_LOG(params,
		    "Error: Can't restore to a read-only volume: \"%s\"\n",
		    rspath);
		return (NDMP_ILLEGAL_ARGS_ERR);
	}
	if (fs_is_chkpntvol(rspath)) {
		MOD_LOG(params,
		    "Error: Can't restore to a checkpoint: \"%s\"\n", rspath);
		return (NDMP_ILLEGAL_ARGS_ERR);
	}

	if (same_path(bkpath, rspath))
		rspath = "";

	if ((nlp->nlp_restore_path = strdup(rspath)) == NULL)
		return (NDMP_NO_MEM_ERR);

	bkpath = trim_name(bkpath);
	if (correct_ents(params, nlp->nlp_nfiles, bkpath) < 0) {
		free(nlp->nlp_restore_path);
		return (NDMP_ILLEGAL_ARGS_ERR);
	}

	if (check_restore_paths(params, nlp->nlp_nfiles, rspath) < 0) {
		free(nlp->nlp_restore_path);
		return (NDMP_ILLEGAL_ARGS_ERR);
	}

	MOD_LOG(params, "Restoring %d files.\n", nlp->nlp_nfiles);
	MOD_LOG(params, "Restoring to: \"%s\".\n", nlp->nlp_restore_path);
	MOD_LOG(params, "Record size: %d\n", session->ns_mover.md_record_size);

	return (NDMP_NO_ERR);
}