Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
268f3be1
Commit
268f3be1
authored
Oct 06, 2006
by
Steve French
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[CIFS] readdir (ffirst) enablement of accurate timestamps from legacy servers
Signed-off-by:
Steve French
<
sfrench@us.ibm.com
>
parent
1a70d652
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
27 additions
and
30 deletions
+27
-30
fs/cifs/netmisc.c
fs/cifs/netmisc.c
+18
-21
fs/cifs/readdir.c
fs/cifs/readdir.c
+9
-9
No files found.
fs/cifs/netmisc.c
View file @
268f3be1
...
...
@@ -918,45 +918,42 @@ __le64 cnvrtDosCifsTm(__u16 date, __u16 time)
{
return
cpu_to_le64
(
cifs_UnixTimeToNT
(
cnvrtDosUnixTm
(
date
,
time
)));
}
struct
timespec
cnvrtDosUnixTm
(
__u16
date
,
__u16
time
)
{
__u8
dt
[
2
];
__u8
tm
[
2
];
struct
timespec
ts
;
int
sec
,
min
,
days
,
month
,
year
;
struct
timespec
removeme
;
/* BB removeme BB */
/* SMB_TIME * st = (SMB_TIME *)&time;*/
int
sec
,
min
,
days
,
month
,
year
;
SMB_TIME
*
st
=
(
SMB_TIME
*
)
&
time
;
SMB_DATE
*
sd
=
(
SMB_DATE
*
)
&
date
;
cFYI
(
1
,(
"date %d time %d"
,
date
,
time
));
dt
[
0
]
=
date
&
0xFF
;
dt
[
1
]
=
(
date
&
0xFF00
)
>>
8
;
tm
[
0
]
=
time
&
0xFF
;
tm
[
1
]
=
(
time
&
0xFF00
)
>>
8
;
sec
=
tm
[
0
]
&
0x1F
;
sec
=
2
*
sec
;
min
=
((
tm
[
0
]
>>
5
)
&
0xFF
)
+
((
tm
[
1
]
&
0x7
)
<<
3
);
sec
=
2
*
st
->
TwoSeconds
;
min
=
st
->
Minutes
;
if
((
sec
>
59
)
||
(
min
>
59
))
cERROR
(
1
,(
"illegal time min %d sec %d"
,
min
,
sec
));
sec
+=
(
min
*
60
);
sec
+=
60
*
60
*
((
tm
[
1
]
>>
3
)
&
0xFF
)
/* hours */
;
days
=
(
dt
[
0
]
&
0x1F
)
-
1
;
month
=
((
dt
[
0
]
>>
5
)
&
0xFF
)
+
((
dt
[
1
]
&
0x1
)
<<
3
);
if
(
month
>
12
)
cERROR
(
1
,(
"illegal month %d in date"
,
month
));
sec
+=
60
*
60
*
st
->
Hours
;
if
(
st
->
Hours
>
24
)
cERROR
(
1
,(
"illegal hours %d"
,
st
->
Hours
));
days
=
sd
->
Day
;
month
=
sd
->
Month
;
if
((
days
>
31
)
||
(
month
>
12
))
cERROR
(
1
,(
"illegal date, month %d day: %d"
,
month
,
days
));
month
-=
1
;
days
+=
total_days_of_prev_months
[
month
];
days
+=
3653
;
/* account for difference in days between 1980 and 1970 */
year
=
(
dt
[
1
]
>>
1
)
&
0xFF
;
year
=
sd
->
Year
;
days
+=
year
*
365
;
days
+=
(
year
/
4
);
/* leap year */
/* adjust for leap year where we are still before leap day */
days
-=
((
year
&
0x03
)
==
0
)
&&
(
month
<
2
?
1
:
0
);
sec
+=
24
*
60
*
60
*
days
;
removeme
=
CURRENT_TIME
;
/* BB removeme BB */
ts
.
tv_sec
=
sec
;
/* cFYI(1,("sec after cnvrt dos to unix time %d",sec)); */
ts
.
tv_nsec
=
0
;
return
ts
;
}
fs/cifs/readdir.c
View file @
268f3be1
...
...
@@ -139,19 +139,19 @@ static void fill_in_inode(struct inode *tmp_inode, int new_buf_type,
FIND_FILE_STANDARD_INFO
*
pfindData
=
(
FIND_FILE_STANDARD_INFO
*
)
buf
;
/* ts
= cnvrtDosUnixTm(
tmp_inode
->
i_mtime
=
cnvrtDosUnixTm
(
le16_to_cpu
(
pfindData
->
LastWriteDate
),
le16_to_cpu(pfindData->LastWriteTime));*/
le16_to_cpu
(
pfindData
->
LastWriteTime
));
tmp_inode
->
i_atime
=
cnvrtDosUnixTm
(
le16_to_cpu
(
pfindData
->
LastAccessDate
),
le16_to_cpu
(
pfindData
->
LastAccessTime
));
tmp_inode
->
i_ctime
=
cnvrtDosUnixTm
(
le16_to_cpu
(
pfindData
->
LastWriteDate
),
le16_to_cpu
(
pfindData
->
LastWriteTime
));
attr
=
le16_to_cpu
(
pfindData
->
Attributes
);
allocation_size
=
le32_to_cpu
(
pfindData
->
AllocationSize
);
end_of_file
=
le32_to_cpu
(
pfindData
->
DataSize
);
/* do not need to use current_fs_time helper function since
time not stored for this case so atime can not "go backwards"
by pulling newer older from disk when inode refrenshed */
tmp_inode
->
i_atime
=
CURRENT_TIME
;
/* tmp_inode->i_mtime = BB FIXME - add dos time handling
tmp_inode->i_ctime = 0; BB FIXME */
}
/* Linux can not store file creation time unfortunately so ignore it */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment