r2573: - added a configure test for nanosecond time resolution in struct stat
authorAndrew Tridgell <tridge@samba.org>
Fri, 24 Sep 2004 00:44:42 +0000 (00:44 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:59:06 +0000 (12:59 -0500)
  (recently Linux systems support this, allowing us to support the
  full resolution in NTTIME)

- use nanosecond resolution in the posix backend if available

- moved the configure tests and list of object files for the posix
  backend into ntvfs/posix/ to keep them more neatlly separated.
(This used to be commit d92ad9f307fe16a3b253a0555b437f14c94b4dd7)

source4/ntvfs/config.m4
source4/ntvfs/config.mk
source4/ntvfs/posix/config.m4 [new file with mode: 0644]
source4/ntvfs/posix/config.mk [new file with mode: 0644]
source4/ntvfs/posix/pvfs_fileinfo.c

index f23610fef4fdc7cd543db0b53f57d8033338d148..051a6883e2aba2e9bda9a40bafdedf135515712d 100644 (file)
@@ -1,5 +1,8 @@
 dnl # NTVFS Server subsystem
 
+SMB_INCLUDE_M4(ntvfs/posix/config.m4)
+SMB_MODULE_MK(ntvfs_posix, NTVFS, STATIC, ntvfs/posix/config.mk)
+
 SMB_MODULE_MK(ntvfs_cifs, NTVFS, STATIC, ntvfs/config.mk)
 
 SMB_MODULE_MK(ntvfs_simple, NTVFS, STATIC, ntvfs/config.mk)
@@ -8,8 +11,6 @@ SMB_MODULE_MK(ntvfs_print, NTVFS, STATIC, ntvfs/config.mk)
 
 SMB_MODULE_MK(ntvfs_ipc, NTVFS, STATIC, ntvfs/config.mk)
 
-SMB_MODULE_MK(ntvfs_posix, NTVFS, STATIC, ntvfs/config.mk)
-
 SMB_MODULE_MK(ntvfs_nbench, NTVFS, STATIC, ntvfs/config.mk)
 
 SMB_SUBSYSTEM_MK(NTVFS,ntvfs/config.mk)
index cf48cc61c22ff42375938cc2d519c1d786651548..d00cc2b1f4e97e0f4cca4a21d47f06e34dbe90f4 100644 (file)
@@ -35,33 +35,10 @@ INIT_OBJ_FILES = \
                ntvfs/ipc/vfs_ipc.o \
                ntvfs/ipc/ipc_rap.o \
                ntvfs/ipc/rap_server.o
-
 # End MODULE ntvfs_ipc
 ################################################
 
-################################################
-# Start MODULE ntvfs_posix
-[MODULE::ntvfs_posix]
-INIT_OBJ_FILES = \
-               ntvfs/posix/vfs_posix.o
-ADD_OBJ_FILES = \
-               ntvfs/posix/pvfs_util.o \
-               ntvfs/posix/pvfs_search.o \
-               ntvfs/posix/pvfs_dirlist.o \
-               ntvfs/posix/pvfs_fileinfo.o \
-               ntvfs/posix/pvfs_unlink.o \
-               ntvfs/posix/pvfs_mkdir.o \
-               ntvfs/posix/pvfs_open.o \
-               ntvfs/posix/pvfs_read.o \
-               ntvfs/posix/pvfs_write.o \
-               ntvfs/posix/pvfs_fsinfo.o \
-               ntvfs/posix/pvfs_qfileinfo.o \
-               ntvfs/posix/pvfs_setfileinfo.o \
-               ntvfs/posix/pvfs_rename.o \
-               ntvfs/posix/pvfs_resolve.o \
-               ntvfs/posix/pvfs_shortname.o
-# End MODULE ntvfs_posix
-################################################
+
 
 ################################################
 # Start MODULE ntvfs_nbench
diff --git a/source4/ntvfs/posix/config.m4 b/source4/ntvfs/posix/config.m4
new file mode 100644 (file)
index 0000000..d8a2e3e
--- /dev/null
@@ -0,0 +1,23 @@
+SMB_MODULE_MK(ntvfs_posix, NTVFS, STATIC, ntvfs/config.mk)
+
+
+dnl #############################################
+dnl see if we have nanosecond resolution for stat
+AC_CACHE_CHECK([for tv_nsec nanosecond fields in struct stat],ac_cv_have_stat_tv_nsec,[
+AC_TRY_COMPILE(
+[
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+],
+[struct stat st; 
+ st.st_mtim.tv_nsec;
+ st.st_atim.tv_nsec;
+ st.st_ctim.tv_nsec;
+],
+ac_cv_decl_have_stat_tv_nsec=yes,
+ac_cv_decl_have_stat_tv_nsec=no)
+])
+if test x"$ac_cv_decl_have_stat_tv_nsec" = x"yes"; then
+   AC_DEFINE(HAVE_STAT_TV_NSEC,1,[Whether stat has tv_nsec nanosecond fields])
+fi
diff --git a/source4/ntvfs/posix/config.mk b/source4/ntvfs/posix/config.mk
new file mode 100644 (file)
index 0000000..ad4c754
--- /dev/null
@@ -0,0 +1,23 @@
+################################################
+# Start MODULE ntvfs_posix
+[MODULE::ntvfs_posix]
+INIT_OBJ_FILES = \
+               ntvfs/posix/vfs_posix.o
+ADD_OBJ_FILES = \
+               ntvfs/posix/pvfs_util.o \
+               ntvfs/posix/pvfs_search.o \
+               ntvfs/posix/pvfs_dirlist.o \
+               ntvfs/posix/pvfs_fileinfo.o \
+               ntvfs/posix/pvfs_unlink.o \
+               ntvfs/posix/pvfs_mkdir.o \
+               ntvfs/posix/pvfs_open.o \
+               ntvfs/posix/pvfs_read.o \
+               ntvfs/posix/pvfs_write.o \
+               ntvfs/posix/pvfs_fsinfo.o \
+               ntvfs/posix/pvfs_qfileinfo.o \
+               ntvfs/posix/pvfs_setfileinfo.o \
+               ntvfs/posix/pvfs_rename.o \
+               ntvfs/posix/pvfs_resolve.o \
+               ntvfs/posix/pvfs_shortname.o
+# End MODULE ntvfs_posix
+################################################
index be559cf1795e5d577c51498e4ac2a1ff379fa32e..77eb10422d0463190477329d56b628e6e10a6119 100644 (file)
@@ -139,6 +139,12 @@ NTSTATUS pvfs_fill_dos_info(struct pvfs_state *pvfs, struct pvfs_filename *name)
        unix_to_nt_time(&name->dos.access_time, name->st.st_atime);
        unix_to_nt_time(&name->dos.write_time, name->st.st_mtime);
        unix_to_nt_time(&name->dos.change_time, name->st.st_mtime);
+#ifdef HAVE_STAT_TV_NSEC
+       name->dos.create_time += name->st.st_ctim.tv_nsec / 100;
+       name->dos.access_time += name->st.st_atim.tv_nsec / 100;
+       name->dos.write_time  += name->st.st_mtim.tv_nsec / 100;
+       name->dos.change_time += name->st.st_mtim.tv_nsec / 100;
+#endif
        name->dos.attrib = dos_mode_from_stat(pvfs, &name->st);
        name->dos.alloc_size = name->st.st_size;
        name->dos.nlink = name->st.st_nlink;