コード例 #1
0
GtStr* gt_get_gtdata_path(const char *prog, GtError *err)
{
  GtStr *path;
  const char **defaultpath;
  int had_err = 0;
  gt_error_check(err);
  gt_assert(prog);
  path = gt_str_new();
  had_err = gt_file_find_exec_in_path(path, prog, err);
  if (!had_err) {
    gt_assert(gt_str_length(path));
    gt_str_append_cstr(path, GTDATADIR);
    if (gt_file_exists_and_is_dir(gt_str_get(path)))
      return path;
    gt_str_set_length(path, gt_str_length(path) - strlen(GTDATADIR));
    gt_str_append_cstr(path, UPDIR);
    gt_str_append_cstr(path, GTDATADIR);
    if (gt_file_exists_and_is_dir(gt_str_get(path)))
      return path;
    for (defaultpath = GTDATA_DEFAULT_PATHS; *defaultpath; defaultpath++) {
      gt_str_reset(path);
      gt_str_append_cstr(path, *defaultpath);
      if (gt_file_exists_and_is_dir(gt_str_get(path)))
        return path;
    }
    if (!gt_file_exists_and_is_dir(gt_str_get(path))) {
      gt_error_set(err, "could not find gtdata%c directory", GT_PATH_SEPARATOR);
      had_err = -1;
    }
  }
  if (had_err) {
    gt_str_delete(path);
    return NULL;
  }
  return path;
}
コード例 #2
0
ファイル: bssm_param.c プロジェクト: potter-s/genometools
GthBSSMParam* gth_bssm_param_load(const char *filename, GtError *err)
{
    GthBSSMParam *bssm_param = NULL;
    GtStr *path = gt_str_new();
    int had_err = 0;

    gt_error_check(err);

    if (gt_file_exists(filename))
        gt_str_append_cstr(path, filename);
    else {
        if (strchr(filename, GT_PATH_SEPARATOR)) {
            gt_error_set(err, "filename \"%s\" contains illegal symbol '%c': the "
                         "path list specified by environment variable \"%s\" "
                         "cannot be searched for it", filename,
                         GT_PATH_SEPARATOR, BSSMENVNAME);
            had_err = -1;
        }
        /* check for file path in environment variable */
        if (!had_err)
            had_err = gt_file_find_in_env(path, filename, BSSMENVNAME, err);
        if (!had_err && !gt_str_length(path)) {
            gt_error_set(err, "file \"%s\" not found in directory list specified "
                         "by environment variable %s", filename, BSSMENVNAME);
            had_err = -1;
        }
        if (!had_err) {
            /* path found -> append filename */
            gt_str_append_char(path, GT_PATH_SEPARATOR);
            gt_str_append_cstr(path, filename);
        }
        else {
            /* check for file path relative to binary */
            int new_err = gt_file_find_exec_in_path(path, gt_error_get_progname(err),
                                                    NULL);
            if (!new_err) {
                gt_assert(gt_str_length(path));
                gt_str_append_char(path, GT_PATH_SEPARATOR);
                gt_str_append_cstr(path, "bssm");
                gt_str_append_char(path, GT_PATH_SEPARATOR);
                gt_str_append_cstr(path, filename);
                if (gt_file_exists(gt_str_get(path))) {
                    gt_error_unset(err);
                    had_err = 0;
                }
            }
        }
    }

    if (!had_err) {
        if (!(bssm_param = bssm_param_plain_read(gt_str_get(path), err)))
            had_err = -1;
        if (had_err) {
            /* loading new plain text format didn't work -> try old binary format */
            if ((bssm_param = load_old_binary_format(path, filename, NULL))) {
                /* loading binary format worked -> unset error */
                gt_error_unset(err);
                had_err = 0;
            }
        }
    }

    gt_str_delete(path);

    if (had_err) {
        gth_bssm_param_delete(bssm_param);
        return NULL;
    }
    return bssm_param;
}