HYD_status HYDU_correct_wdir(char **wdir) { char *tmp[HYD_NUM_TMP_STRINGS]; HYD_status status = HYD_SUCCESS; HYDU_FUNC_ENTER(); if (*wdir == NULL) { *wdir = HYDU_getcwd(); } else if (*wdir[0] != '/') { tmp[0] = HYDU_getcwd(); tmp[1] = HYDU_strdup("/"); tmp[2] = HYDU_strdup(*wdir); tmp[3] = NULL; HYDU_FREE(*wdir); status = HYDU_str_alloc_and_join(tmp, wdir); HYDU_ERR_POP(status, "unable to join strings\n"); HYDU_free_strlist(tmp); } fn_exit: HYDU_FUNC_EXIT(); return status; fn_fail: goto fn_exit; }
static HYD_status get_abs_wd(const char *wd, char **abs_wd) { int ret; char *cwd; HYD_status status = HYD_SUCCESS; if (wd == NULL) { *abs_wd = NULL; goto fn_exit; } if (wd[0] != '.') { *abs_wd = (char *) wd; goto fn_exit; } cwd = HYDU_getcwd(); ret = chdir(wd); if (ret < 0) HYDU_ERR_POP(status, "error calling chdir\n"); *abs_wd = HYDU_getcwd(); ret = chdir(cwd); if (ret < 0) HYDU_ERR_POP(status, "error calling chdir\n"); fn_exit: return status; fn_fail: goto fn_exit; }