mirror of
https://github.com/wiiu-env/libfat.git
synced 2024-11-22 01:49:17 +01:00
add FAT_setAttr, expose FAT_setAttr/FAT_getAttr and add defines for DOS attributes
This commit is contained in:
parent
8829ebdbdb
commit
f6ff332c5c
@ -99,6 +99,21 @@ Get Volume Label
|
|||||||
*/
|
*/
|
||||||
extern void fatGetVolumeLabel (const char* name, char *label);
|
extern void fatGetVolumeLabel (const char* name, char *label);
|
||||||
|
|
||||||
|
// File attributes
|
||||||
|
#define ATTR_ARCHIVE 0x20 // Archive
|
||||||
|
#define ATTR_DIRECTORY 0x10 // Directory
|
||||||
|
#define ATTR_VOLUME 0x08 // Volume
|
||||||
|
#define ATTR_SYSTEM 0x04 // System
|
||||||
|
#define ATTR_HIDDEN 0x02 // Hidden
|
||||||
|
#define ATTR_READONLY 0x01 // Read only
|
||||||
|
|
||||||
|
/*
|
||||||
|
Methods to modify DOS File Attributes
|
||||||
|
*/
|
||||||
|
int FAT_getAttr(const char *file);
|
||||||
|
int FAT_setAttr(const char *file, int attr );
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -69,9 +69,54 @@ int FAT_getAttr(const char *file) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int FAT_setAttr(const char *file, int attr) {
|
int FAT_setAttr(const char *file, int attr) {
|
||||||
DIR_ENTRY dirEntry;
|
|
||||||
if (!_FAT_findEntry(file,&dirEntry)) return -1;
|
// Defines...
|
||||||
|
DIR_ENTRY_POSITION entryEnd;
|
||||||
|
PARTITION *partition = NULL;
|
||||||
|
DIR_ENTRY* dirEntry = NULL;
|
||||||
|
|
||||||
|
// Get Partition
|
||||||
|
partition = _FAT_partition_getPartitionFromPath( file );
|
||||||
|
|
||||||
|
// Check Partition
|
||||||
|
if( !partition )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// Move the path pointer to the start of the actual path
|
||||||
|
if (strchr (file, ':') != NULL)
|
||||||
|
file = strchr (file, ':') + 1;
|
||||||
|
if (strchr (file, ':') != NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// Get DIR_ENTRY
|
||||||
|
if( !_FAT_directory_entryFromPath (partition, dirEntry, file, NULL) )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// Get Entry-End
|
||||||
|
entryEnd = dirEntry->dataEnd;
|
||||||
|
|
||||||
|
// Lock Partition
|
||||||
|
_FAT_lock(&partition->lock);
|
||||||
|
|
||||||
|
|
||||||
|
// Write Data
|
||||||
|
_FAT_cache_writePartialSector (
|
||||||
|
partition->cache // Cache to write
|
||||||
|
, &attr // Value to be written
|
||||||
|
, _FAT_fat_clusterToSector( partition , entryEnd.cluster ) + entryEnd.sector // cluster
|
||||||
|
, entryEnd.offset * DIR_ENTRY_DATA_SIZE + DIR_ENTRY_attributes // offset
|
||||||
|
, 1 // Size in bytes
|
||||||
|
);
|
||||||
|
|
||||||
|
// Flush any sectors in the disc cache
|
||||||
|
if ( !_FAT_cache_flush( partition->cache ) ) {
|
||||||
|
_FAT_unlock(&partition->lock); // Unlock Partition
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unlock Partition
|
||||||
|
_FAT_unlock(&partition->lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user