Esempio n. 1
0
int fsdb_set_file_attrs (a_inode *aino)
{
    struct stat statbuf;
    int mode=0, tmpmask;

    tmpmask = filesys_parse_mask (aino->amigaos_mode);

    if (stat (aino->nname, &statbuf) == -1)
	return ERROR_OBJECT_NOT_AROUND;

    /* Unix dirs behave differently than AmigaOS ones.  */
    /* windows dirs go where no dir has gone before...  */
    if (! aino->dir) {
	if ((tmpmask & (A_FIBF_WRITE | A_FIBF_DELETE)) == 0)
	    mode |= ATTR_READONLY;
	if (tmpmask & A_FIBF_ARCHIVE)
	    mode |= ATTR_ARCHIVE;
	//else
	    //mode &= ~ATTR_ARCHIVE;

	FAT_setAttr(aino->nname, mode);
    }

    aino->dirty = 1;
    return 0;
}
Esempio n. 2
0
int fsdb_set_file_attrs (a_inode *aino, int mask)
{
    struct stat statbuf;
    uae_u32 mode=0, tmpmask;

    tmpmask = filesys_parse_mask(mask);
	
    if (stat (aino->nname, &statbuf) == -1)
	return ERROR_OBJECT_NOT_AROUND;
	
    /* Unix dirs behave differently than AmigaOS ones.  */
	/* windows dirs go where no dir has gone before...  */
    if (! aino->dir) {
	/* @@@@@ FELLOW UNSURE */
	if (tmpmask & A_FIBF_ARCHIVE)
	    mode |= FILE_ATTRIBUTE_ARCHIVE;
	else
	    mode &= ~FILE_ATTRIBUTE_ARCHIVE;

	SetFileAttributes(aino->nname, mode);
    }

    aino->amigaos_mode = mask;
    aino->dirty = 1;
    return 0;
}
Esempio n. 3
0
int fsdb_set_file_attrs (a_inode *aino)
{
	uae_u32 tmpmask;
	uae_u8 fsdb[UAEFSDB2_LEN];
	uae_u32 mode;

	tmpmask = filesys_parse_mask (aino->amigaos_mode);

	mode = GetFileAttributesSafe (aino->nname);
	if (mode == INVALID_FILE_ATTRIBUTES)
		return ERROR_OBJECT_NOT_AROUND;
	mode &= FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN;

	mode = 0;
	if ((tmpmask & (A_FIBF_WRITE | A_FIBF_DELETE)) == 0)
		mode |= FILE_ATTRIBUTE_READONLY;
	if (!(tmpmask & A_FIBF_ARCHIVE))
		mode |= FILE_ATTRIBUTE_ARCHIVE;
	if (tmpmask & A_FIBF_PURE)
		mode |= FILE_ATTRIBUTE_SYSTEM;
	if (tmpmask & A_FIBF_HIDDEN)
		mode |= FILE_ATTRIBUTE_HIDDEN;
	SetFileAttributesSafe (aino->nname, mode);

	aino->dirty = 1;
	if (aino->volflags & MYVOLUMEINFO_STREAMS) {
		if (needs_fsdb (aino)) {
			create_uaefsdb (aino, fsdb, mode);
			write_uaefsdb (aino->nname, fsdb);
		} else {
			delete_uaefsdb (aino->nname);
		}
	}
	return 0;
}
Esempio n. 4
0
/* For an a_inode we have newly created based on a filename we found on the
 * native fs, fill in information about this file/directory.  */
void fsdb_fill_file_attrs (a_inode *aino)
{
    int mode;

	if((mode = GetFileAttributes(aino->nname)) == 0xFFFFFFFF) return;
	
    aino->dir = (mode & FILE_ATTRIBUTE_DIRECTORY) ? 1 : 0;
    /* @@@@@ FELLOW UNSURE (START) */
	aino->amigaos_mode = (FILE_ATTRIBUTE_ARCHIVE & mode) ? 0 : A_FIBF_ARCHIVE;
	aino->amigaos_mode |= 0xf; /* set rwed by default */
	/* @@@@@ FELLOW UNSURE (END) */
	aino->amigaos_mode = filesys_parse_mask(aino->amigaos_mode);
}
Esempio n. 5
0
/* For an a_inode we have newly created based on a filename we found on the
* native fs, fill in information about this file/directory.  */
int fsdb_fill_file_attrs (a_inode *base, a_inode *aino)
{
	int mode, winmode, oldamode;
	uae_u8 fsdb[UAEFSDB2_LEN];
	int reset = 0;

	if((mode = GetFileAttributesSafe (aino->nname)) == INVALID_FILE_ATTRIBUTES) {
		write_log (_T("GetFileAttributes('%s') failed! error=%d, aino=%p dir=%d\n"),
			aino->nname, GetLastError(), aino, aino->dir);
		return 0;
	}
	aino->dir = (mode & FILE_ATTRIBUTE_DIRECTORY) ? 1 : 0;
	mode &= FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN;

	if ((base->volflags & MYVOLUMEINFO_STREAMS) && read_uaefsdb (aino->nname, NULL, fsdb)) {
		aino->amigaos_mode = do_get_mem_long ((uae_u32 *)(fsdb + 1));
		xfree (aino->comment);
		aino->comment = NULL;
		if (fsdb[5 + 2 * 257])
			aino->comment = my_strdup_ansi ((char*)fsdb + 5 + 2 * 257);
		xfree (aino_from_buf (base, fsdb, &winmode));
		if (winmode == mode) /* no Windows-side editing? */
			return 1;
		write_log (_T("FS: '%s' protection flags edited from Windows-side\n"), aino->nname);
		reset = 1;
		/* edited from Windows-side -> use Windows side flags instead */
	}

	oldamode = aino->amigaos_mode;
	aino->amigaos_mode = A_FIBF_EXECUTE | A_FIBF_READ;
	if (!(FILE_ATTRIBUTE_ARCHIVE & mode))
		aino->amigaos_mode |= A_FIBF_ARCHIVE;
	if (!(FILE_ATTRIBUTE_READONLY & mode))
		aino->amigaos_mode |= A_FIBF_WRITE | A_FIBF_DELETE;
	if (FILE_ATTRIBUTE_SYSTEM & mode)
		aino->amigaos_mode |= A_FIBF_PURE;
	if (FILE_ATTRIBUTE_HIDDEN & mode)
		aino->amigaos_mode |= A_FIBF_HIDDEN;
	aino->amigaos_mode = filesys_parse_mask(aino->amigaos_mode);
	aino->amigaos_mode |= oldamode & A_FIBF_SCRIPT;
	if (reset && (base->volflags & MYVOLUMEINFO_STREAMS)) {
		create_uaefsdb (aino, fsdb, mode);
		write_uaefsdb (aino->nname, fsdb);
	}
	return 1;
}
Esempio n. 6
0
/* For an a_inode we have newly created based on a filename we found on the
 * native fs, fill in information about this file/directory.  */
int fsdb_fill_file_attrs (a_inode *base, a_inode *aino)
{
    int mode;

    if ((mode = FAT_getAttr (aino->nname)) <0) {
	write_log ("FAT_getAttr('%s') failed! error=%d, aino=%p dir=%d\n", aino->nname,errno,aino,aino->dir);
	return 0;
    }

    aino->dir = (mode & ATTR_DIRECTORY) ? 1 : 0;
    aino->amigaos_mode = A_FIBF_EXECUTE | A_FIBF_READ;
    if (ATTR_ARCHIVE & mode)
	aino->amigaos_mode |= A_FIBF_ARCHIVE;
    if (! (ATTR_READONLY & mode))
	aino->amigaos_mode |= A_FIBF_WRITE | A_FIBF_DELETE;
    aino->amigaos_mode = filesys_parse_mask (aino->amigaos_mode);
    return 1;
}