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; }
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; }
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; }
/* 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); }
/* 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; }
/* 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; }