OSDN Git Service

* path.cc (conv_path_list): Take cygwin_conv_path_t as third parameter.
[pf3gnuchains/pf3gnuchains4x.git] / winsup / cygwin / nfs.cc
1 /* nfs.cc
2
3    Copyright 2008, 2010 Red Hat, Inc.
4
5 This software is a copyrighted work licensed under the terms of the
6 Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
7 details. */
8
9 #include "winsup.h"
10 #include "sys/fcntl.h"
11 #include "nfs.h"
12 #include "ntdll.h"
13
14 struct nfs_aol_ffei_t nfs_aol_ffei = { 0, 0, sizeof (NFS_ACT_ON_LINK) - 1, 0,
15                                        NFS_ACT_ON_LINK };
16
17 uint32_t nfs_type_mapping[] = { 0, S_IFREG, S_IFDIR, S_IFBLK,
18                                 S_IFCHR, S_IFLNK, S_IFSOCK, S_IFIFO };
19
20 NTSTATUS
21 nfs_fetch_fattr3 (HANDLE h, fattr3 *fattr_buf)
22 {
23   struct {
24     FILE_FULL_EA_INFORMATION ffei;
25     char buf[sizeof (NFS_V3_ATTR) + sizeof (fattr3)];
26   } ffei_buf;
27   struct {
28      FILE_GET_EA_INFORMATION fgei;
29      char buf[sizeof (NFS_V3_ATTR)];
30   } fgei_buf;
31   NTSTATUS status;
32   IO_STATUS_BLOCK io;
33
34   fgei_buf.fgei.NextEntryOffset = 0;
35   fgei_buf.fgei.EaNameLength = sizeof (NFS_V3_ATTR) - 1;
36   stpcpy (fgei_buf.fgei.EaName, NFS_V3_ATTR);
37   status = NtQueryEaFile (h, &io, &ffei_buf.ffei, sizeof ffei_buf, TRUE,
38                           &fgei_buf.fgei, sizeof fgei_buf, NULL, TRUE);
39   if (NT_SUCCESS (status))
40     {
41       fattr3 *nfs_attr = (fattr3 *) (ffei_buf.ffei.EaName
42                                      + ffei_buf.ffei.EaNameLength + 1);
43       if (fattr_buf)
44         memcpy (fattr_buf, nfs_attr, sizeof (fattr3));
45     }
46   return status;
47 }