Example #1
0
/* worker function for changing to a relative filename */
static int do_change_relative(DATAFILE *dat, int *param, int param2)
{
    AL_CONST char *orig = get_datafile_property(dat, DAT_ORIG);
    char relative[FILENAME_LENGTH];

    if (!orig[0] || is_relative_filename(orig)) {
        (*param)++;
        return D_O_K;
    }

    make_relative_filename(relative, grabber_data_file, orig, FILENAME_LENGTH);
    datedit_set_property(dat, DAT_ORIG, relative);

    return D_REDRAW;
}
Example #2
0
bool IsSameOrSubDir(const String &parent, const String &path)
{
    char can_parent[MAX_PATH];
    char can_path[MAX_PATH];
    char relative[MAX_PATH];
    // canonicalize_filename treats "." as "./." (file in working dir)
    const char *use_parent = parent == "." ? "./" : parent;
    const char *use_path   = path   == "." ? "./" : path;
    canonicalize_filename(can_parent, use_parent, MAX_PATH);
    canonicalize_filename(can_path, use_path, MAX_PATH);
    const char *pstr = make_relative_filename(relative, can_parent, can_path, MAX_PATH);
    if (!pstr)
        return false;
    for (pstr = strstr(pstr, ".."); pstr && *pstr; pstr = strstr(pstr, ".."))
    {
        pstr += 2;
        if (*pstr == '/' || *pstr == '\\' || *pstr == 0)
            return false;
    }
    return true;
}