SgObject Sg_AbsolutePath(SgString *path) { char buf[PATH_MAX]; char *ret = realpath(Sg_Utf32sToUtf8s(path), buf); if (ret) { return Sg_Utf8sToUtf32s(buf, strlen(buf)); } if (errno == ENOENT) { /* do some trick here */ if (Sg_AbsolutePathP(path)) return normalise_path(path); return normalise_path(Sg_BuildPath(Sg_CurrentDirectory(), path)); } return SG_FALSE; }
static SgObject join_path(SgObject base, int sep, SgObject name) { if (sep) return Sg_BuildPath(base, name); else return Sg_StringAppend2(base, name); }