diff options
author | Derrell Lipman <derrell@samba.org> | 2005-06-01 17:40:40 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:57:04 -0500 |
commit | e317034997bbeab447298070afdb1b78c60e0e69 (patch) | |
tree | 06e4d09719d735ebba861a74e2e60fe9f404623e /examples | |
parent | 0100bb0eb697105db7ef1473455a8b180ca43cb4 (diff) | |
download | samba-e317034997bbeab447298070afdb1b78c60e0e69.tar.gz samba-e317034997bbeab447298070afdb1b78c60e0e69.tar.bz2 samba-e317034997bbeab447298070afdb1b78c60e0e69.zip |
r7168: Updating file times from libsmbclient was not working for win98. Although
the function that was being used to set attributes is a core protocol
function (SMBsetatr = 0x09), it does not appear to work on win98. As a
temporary measure, when file times are to be set, this version opens the
file and uses SMBsetattrE = 0x22 instead. (The other advantage of this
function over the original one is that it supports setting access time as
well as modification time.)
The next step, the proper solution if it can be made to work, is to write
functions that use TRANS2_SET_PATH_INFO instead.
(This used to be commit bab0bf7f4f9d2a4b6fcee4429094349302bbeb33)
Diffstat (limited to 'examples')
-rw-r--r-- | examples/libsmbclient/smbwrapper/smbw_stat.c | 51 |
1 files changed, 3 insertions, 48 deletions
diff --git a/examples/libsmbclient/smbwrapper/smbw_stat.c b/examples/libsmbclient/smbwrapper/smbw_stat.c index 70b3064d22..a386c09209 100644 --- a/examples/libsmbclient/smbwrapper/smbw_stat.c +++ b/examples/libsmbclient/smbwrapper/smbw_stat.c @@ -22,53 +22,8 @@ #include "smbw.h" -static int timezone_diff = -1; - -#define TM_YEAR_BASE 1900 - -/******************************************************************* -yield the difference between *A and *B, in seconds, ignoring leap seconds -********************************************************************/ -static int tm_diff(struct tm *a, struct tm *b) -{ - int ay = a->tm_year + (TM_YEAR_BASE - 1); - int by = b->tm_year + (TM_YEAR_BASE - 1); - int intervening_leap_days = - (ay/4 - by/4) - (ay/100 - by/100) + (ay/400 - by/400); - int years = ay - by; - int days = 365*years + intervening_leap_days + (a->tm_yday - b->tm_yday); - int hours = 24*days + (a->tm_hour - b->tm_hour); - int minutes = 60*hours + (a->tm_min - b->tm_min); - int seconds = 60*minutes + (a->tm_sec - b->tm_sec); - - return seconds; -} - -/******************************************************************* - return the UTC offset in seconds west of UTC, or 0 if it cannot be determined - ******************************************************************/ -static int TimeZone(time_t t) -{ - struct tm *tm = gmtime(&t); - struct tm tm_utc; - if (!tm) - return 0; - tm_utc = *tm; - tm = localtime(&t); - if (!tm) - return 0; - return tm_diff(&tm_utc,tm); - -} - - static void copy_stat(struct SMBW_stat *external, struct stat *internal) { - if (timezone_diff < 0) - { - timezone_diff = TimeZone(time(NULL)); - } - external->s_dev = internal->st_dev; external->s_ino = internal->st_ino; external->s_mode = internal->st_mode; @@ -79,9 +34,9 @@ static void copy_stat(struct SMBW_stat *external, struct stat *internal) external->s_size = internal->st_size; external->s_blksize = internal->st_blksize; external->s_blocks = internal->st_blocks; - external->s_atime = internal->st_atime + timezone_diff; - external->s_mtime = internal->st_mtime + timezone_diff; - external->s_ctime = internal->st_ctime + timezone_diff; + external->s_atime = internal->st_atime; + external->s_mtime = internal->st_mtime; + external->s_ctime = internal->st_ctime; } |