NCP22/25 Change-Bit-Logging
All checks were successful
Source release / source-package (push) Successful in 37s

This commit is contained in:
Mario Fetka
2026-05-25 21:42:46 +02:00
parent 5a701740fb
commit 9aa2a6eee3

View File

@@ -1278,16 +1278,26 @@ static time_t nw_2_un_time_parts(uint16 xdate, uint16 xtime)
return(mktime(&s_tm));
}
#define DM_ATTRIBUTES 0x0002UL
#define DM_CREATE_DATE 0x0004UL
#define DM_CREATE_TIME 0x0008UL
#define DM_CREATOR_ID 0x0010UL
#define DM_ARCHIVE_DATE 0x0020UL
#define DM_ARCHIVE_TIME 0x0040UL
#define DM_ARCHIVER_ID 0x0080UL
#define DM_MODIFY_DATE 0x0100UL
#define DM_MODIFY_TIME 0x0200UL
#define DM_MODIFIER_ID 0x0400UL
#define DM_LAST_ACCESS_DATE 0x0800UL
#define DM_INHERITED_RIGHTS_MASK 0x1000UL
#define DM_MAXIMUM_SPACE 0x2000UL
#define DM_NCP22_25_TIME_BITS \
(DM_MODIFY_DATE | DM_MODIFY_TIME | DM_LAST_ACCESS_DATE)
#define DM_NCP22_25_ARCHIVE_BITS \
(DM_ARCHIVE_DATE | DM_ARCHIVE_TIME | DM_ARCHIVER_ID)
#define DM_NCP22_25_SUPPORTED_BITS \
(DM_ATTRIBUTES | DM_NCP22_25_ARCHIVE_BITS | DM_NCP22_25_TIME_BITS | \
DM_INHERITED_RIGHTS_MASK)
static int set_ncp22_25_times(int volume, char *unixname, struct stat *stb,
NW_SET_DIR_INFO *f, uint32 change_mask,
@@ -1382,6 +1392,29 @@ static int set_ncp22_25_archive_info(char *unixname,
!!(change_mask & DM_ARCHIVER_ID), aid));
}
static void log_ncp22_25_change_bits(uint32 change_mask)
{
uint32 unsupported = change_mask & ~DM_NCP22_25_SUPPORTED_BITS;
XDPRINTF((5,0,
"NCP22/25 change bits: change=0x%08lx supported=0x%08lx unsupported=0x%08lx",
(unsigned long)change_mask,
(unsigned long)(change_mask & DM_NCP22_25_SUPPORTED_BITS),
(unsigned long)unsupported));
if (unsupported) {
XDPRINTF((5,0,
"NCP22/25 unsupported change bits ignored: create=%d creator=%d modifier=%d maxspace=%d other=0x%08lx",
!!(change_mask & (DM_CREATE_DATE | DM_CREATE_TIME)),
!!(change_mask & DM_CREATOR_ID),
!!(change_mask & DM_MODIFIER_ID),
!!(change_mask & DM_MAXIMUM_SPACE),
(unsigned long)(unsupported & ~(DM_CREATE_DATE | DM_CREATE_TIME |
DM_CREATOR_ID | DM_MODIFIER_ID |
DM_MAXIMUM_SPACE))));
}
}
static int get_file_attrib(NW_FILE_INFO *f, char *unixname, struct stat *stb,
NW_PATH *nwpath)
{
@@ -3042,7 +3075,8 @@ int nw_set_a_directory_entry(int dirhandle,
char unixname[300];
uint32 change_mask=GET_32(f->change_bits);
xstrcpy(unixname,build_unix_name(&nwpath, 0));
if (change_mask & 0x2) {
log_ncp22_25_change_bits(change_mask);
if (change_mask & DM_ATTRIBUTES) {
completition=set_nw_attrib_dword(nwpath.volume, unixname, &stbuff,
GET_32(f->u.f.attributes));
if (!completition)
@@ -3061,14 +3095,14 @@ int nw_set_a_directory_entry(int dirhandle,
S_ISDIR(stbuff.st_mode));
}
if (S_ISDIR(stbuff.st_mode)) {
if (change_mask & 0x1000) {
if (change_mask & DM_INHERITED_RIGHTS_MASK) {
int result=tru_set_inherited_mask(nwpath.volume, unixname,
&stbuff, GET_16(f->u.d.inherited_rights_mask));
if (result)
completition=result;
}
} else {
if (change_mask & 0x1000) {
if (change_mask & DM_INHERITED_RIGHTS_MASK) {
int result=tru_set_inherited_mask(nwpath.volume, unixname,
&stbuff, GET_16(f->u.f.inherited_rights_mask));
if (result)