forked from Minki/linux
cifsd: move nt time functions to misc.c
Move nt time functions in netmisc.c to misc.c to remove netmisc.c file. Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
2efec2dee8
commit
5626518eca
@ -9,5 +9,5 @@ ksmbd-y := unicode.o auth.o vfs.o vfs_cache.o server.o buffer_pool.o \
|
||||
mgmt/ksmbd_ida.o mgmt/user_config.o mgmt/share_config.o \
|
||||
mgmt/tree_connect.o mgmt/user_session.o smb_common.o \
|
||||
transport_tcp.o transport_ipc.o smbacl.o smb2pdu.o \
|
||||
smb2ops.o smb2misc.o asn1.o netmisc.o ndr.o
|
||||
smb2ops.o smb2misc.o asn1.o ndr.o
|
||||
ksmbd-$(CONFIG_SMB_SERVER_SMBDIRECT) += transport_rdma.o
|
||||
|
@ -292,3 +292,49 @@ char *ksmbd_convert_dir_info_name(struct ksmbd_dir_info *d_info,
|
||||
conv[*conv_len + 1] = 0x00;
|
||||
return conv;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert the NT UTC (based 1601-01-01, in hundred nanosecond units)
|
||||
* into Unix UTC (based 1970-01-01, in seconds).
|
||||
*/
|
||||
struct timespec64 ksmbd_NTtimeToUnix(__le64 ntutc)
|
||||
{
|
||||
struct timespec64 ts;
|
||||
|
||||
/* Subtract the NTFS time offset, then convert to 1s intervals. */
|
||||
s64 t = le64_to_cpu(ntutc) - NTFS_TIME_OFFSET;
|
||||
u64 abs_t;
|
||||
|
||||
/*
|
||||
* Unfortunately can not use normal 64 bit division on 32 bit arch, but
|
||||
* the alternative, do_div, does not work with negative numbers so have
|
||||
* to special case them
|
||||
*/
|
||||
if (t < 0) {
|
||||
abs_t = -t;
|
||||
ts.tv_nsec = do_div(abs_t, 10000000) * 100;
|
||||
ts.tv_nsec = -ts.tv_nsec;
|
||||
ts.tv_sec = -abs_t;
|
||||
} else {
|
||||
abs_t = t;
|
||||
ts.tv_nsec = do_div(abs_t, 10000000) * 100;
|
||||
ts.tv_sec = abs_t;
|
||||
}
|
||||
|
||||
return ts;
|
||||
}
|
||||
|
||||
/* Convert the Unix UTC into NT UTC. */
|
||||
inline u64 ksmbd_UnixTimeToNT(struct timespec64 t)
|
||||
{
|
||||
/* Convert to 100ns intervals and then add the NTFS time offset. */
|
||||
return (u64)t.tv_sec * 10000000 + t.tv_nsec / 100 + NTFS_TIME_OFFSET;
|
||||
}
|
||||
|
||||
inline long long ksmbd_systime(void)
|
||||
{
|
||||
struct timespec64 ts;
|
||||
|
||||
ktime_get_real_ts64(&ts);
|
||||
return ksmbd_UnixTimeToNT(ts);
|
||||
}
|
||||
|
@ -35,4 +35,10 @@ struct ksmbd_dir_info;
|
||||
char *ksmbd_convert_dir_info_name(struct ksmbd_dir_info *d_info,
|
||||
const struct nls_table *local_nls,
|
||||
int *conv_len);
|
||||
|
||||
#define NTFS_TIME_OFFSET ((u64)(369 * 365 + 89) * 24 * 3600 * 10000000)
|
||||
|
||||
struct timespec64 ksmbd_NTtimeToUnix(__le64 ntutc);
|
||||
u64 ksmbd_UnixTimeToNT(struct timespec64 t);
|
||||
long long ksmbd_systime(void);
|
||||
#endif /* __KSMBD_MISC_H__ */
|
||||
|
@ -1,58 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (c) International Business Machines Corp., 2002,2008
|
||||
* Author(s): Steve French (sfrench@us.ibm.com)
|
||||
*
|
||||
* Error mapping routines from Samba libsmb/errormap.c
|
||||
* Copyright (C) Andrew Tridgell 2001
|
||||
*/
|
||||
|
||||
#include "glob.h"
|
||||
#include "nterr.h"
|
||||
#include "smb_common.h"
|
||||
|
||||
/*
|
||||
* Convert the NT UTC (based 1601-01-01, in hundred nanosecond units)
|
||||
* into Unix UTC (based 1970-01-01, in seconds).
|
||||
*/
|
||||
struct timespec64 ksmbd_NTtimeToUnix(__le64 ntutc)
|
||||
{
|
||||
struct timespec64 ts;
|
||||
|
||||
/* Subtract the NTFS time offset, then convert to 1s intervals. */
|
||||
s64 t = le64_to_cpu(ntutc) - NTFS_TIME_OFFSET;
|
||||
u64 abs_t;
|
||||
|
||||
/*
|
||||
* Unfortunately can not use normal 64 bit division on 32 bit arch, but
|
||||
* the alternative, do_div, does not work with negative numbers so have
|
||||
* to special case them
|
||||
*/
|
||||
if (t < 0) {
|
||||
abs_t = -t;
|
||||
ts.tv_nsec = do_div(abs_t, 10000000) * 100;
|
||||
ts.tv_nsec = -ts.tv_nsec;
|
||||
ts.tv_sec = -abs_t;
|
||||
} else {
|
||||
abs_t = t;
|
||||
ts.tv_nsec = do_div(abs_t, 10000000) * 100;
|
||||
ts.tv_sec = abs_t;
|
||||
}
|
||||
|
||||
return ts;
|
||||
}
|
||||
|
||||
/* Convert the Unix UTC into NT UTC. */
|
||||
inline u64 ksmbd_UnixTimeToNT(struct timespec64 t)
|
||||
{
|
||||
/* Convert to 100ns intervals and then add the NTFS time offset. */
|
||||
return (u64)t.tv_sec * 10000000 + t.tv_nsec / 100 + NTFS_TIME_OFFSET;
|
||||
}
|
||||
|
||||
inline long long ksmbd_systime(void)
|
||||
{
|
||||
struct timespec64 ts;
|
||||
|
||||
ktime_get_real_ts64(&ts);
|
||||
return ksmbd_UnixTimeToNT(ts);
|
||||
}
|
@ -541,10 +541,4 @@ static inline void inc_rfc1001_len(void *buf, int count)
|
||||
{
|
||||
be32_add_cpu((__be32 *)buf, count);
|
||||
}
|
||||
|
||||
#define NTFS_TIME_OFFSET ((u64)(369 * 365 + 89) * 24 * 3600 * 10000000)
|
||||
|
||||
struct timespec64 ksmbd_NTtimeToUnix(__le64 ntutc);
|
||||
u64 ksmbd_UnixTimeToNT(struct timespec64 t);
|
||||
long long ksmbd_systime(void);
|
||||
#endif /* __SMB_COMMON_H__ */
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "smbacl.h"
|
||||
#include "ndr.h"
|
||||
#include "auth.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "smb_common.h"
|
||||
#include "mgmt/share_config.h"
|
||||
|
Loading…
Reference in New Issue
Block a user