ali@9: #ifdef WIN32 ali@9: #include ali@9: #endif ali@9: #include ali@9: #include ali@9: #include ali@9: ali@9: /* ali@9: * Return an absolute path to . ali@9: * Note that this function makes no attempt to return a unique path, or ali@9: * to remove "." or ".." entries. It simply returns a path which will ali@9: * be unaffected by subsequent calls to chdir(). ali@9: */ ali@9: char *path_to_absolute(const char *path) ali@9: { ali@9: #ifdef WIN32 ali@9: long len; ali@9: gunichar2 *path2; ali@9: gunichar2 *abs2; ali@9: char *abs; ali@9: path2=g_utf8_to_utf16(path,-1,NULL,NULL,NULL); ali@9: if (!path2) ali@9: return NULL; ali@9: len=GetFullPathNameW(path2,0,NULL,NULL); /* len includes nul */ ali@9: if (!len) ali@9: { ali@9: g_free(path2); ali@9: return NULL; ali@9: } ali@9: abs2=g_new(gunichar2,len); ali@9: len=GetFullPathNameW(path2,len,abs2,NULL); /* len excludes nul */ ali@9: g_free(path2); ali@9: if (!len) ali@9: { ali@9: g_free(abs2); ali@9: return NULL; ali@9: } ali@9: abs=g_utf16_to_utf8(abs2,len,NULL,NULL,NULL); ali@9: g_free(abs2); ali@9: return abs; ali@9: #else ali@9: char *s,*abs; ali@9: if (*path=='/') ali@9: abs=g_strdup(path); ali@9: else ali@9: { ali@9: s=g_get_current_dir(); ali@9: abs=g_build_filename(s,path,NULL); ali@9: g_free(s); ali@9: } ali@9: return abs; ali@9: #endif ali@9: }