20 |
|
|
21 |
#include "disk.h" |
#include "disk.h" |
22 |
|
|
|
#if (defined(sun) && (defined(__svr4__) || defined(__SVR4))) |
|
|
#define SOLARIS |
|
|
#endif |
|
|
|
|
|
#if (defined(SOLARIS) || defined(__hpux)) |
|
|
#define DIRFD(a) ((a)->dd_fd) |
|
|
#else |
|
|
#define DIRFD(a) (dirfd(a)) |
|
|
#endif |
|
|
|
|
23 |
#include <sys/types.h> |
#include <sys/types.h> |
24 |
#include <sys/stat.h> |
#include <sys/stat.h> |
25 |
#include <unistd.h> |
#include <unistd.h> |
31 |
#include <utime.h> |
#include <utime.h> |
32 |
#include <time.h> /* ctime */ |
#include <time.h> /* ctime */ |
33 |
|
|
34 |
|
#if defined(HAVE_DIRFD) |
35 |
|
#define DIRFD(a) (dirfd(a)) |
36 |
|
#else |
37 |
|
#define DIRFD(a) ((a)->DIR_FD_MEMBER_NAME) |
38 |
|
#endif |
39 |
|
|
40 |
|
/* TODO: let autoconf figure out everything below... */ |
41 |
|
#if (defined(sun) && (defined(__svr4__) || defined(__SVR4))) |
42 |
|
#define SOLARIS |
43 |
|
#endif |
44 |
|
|
45 |
#if (defined(SOLARIS) || defined (__hpux) || defined(__BEOS__)) |
#if (defined(SOLARIS) || defined (__hpux) || defined(__BEOS__)) |
46 |
#include <sys/statvfs.h> /* solaris statvfs */ |
#include <sys/statvfs.h> /* solaris statvfs */ |
59 |
#define STATFS_T statfs |
#define STATFS_T statfs |
60 |
#define F_NAMELEN(buf) (NAME_MAX) |
#define F_NAMELEN(buf) (NAME_MAX) |
61 |
|
|
62 |
|
#elif (defined(__SGI_IRIX__)) |
63 |
|
#include <sys/types.h> |
64 |
|
#include <sys/statvfs.h> |
65 |
|
#define STATFS_FN(path, buf) (statvfs(path,buf)) |
66 |
|
#define STATFS_T statvfs |
67 |
|
#define F_NAMELEN(buf) ((buf).f_namemax) |
68 |
|
|
69 |
#else |
#else |
70 |
#include <sys/vfs.h> /* linux statfs */ |
#include <sys/vfs.h> /* linux statfs */ |
71 |
#include <mntent.h> |
#include <mntent.h> |
847 |
// Get information for directory entry |
// Get information for directory entry |
848 |
sprintf(fullpath, "%s/%s", dirname, pdirent->d_name); |
sprintf(fullpath, "%s/%s", dirname, pdirent->d_name); |
849 |
|
|
|
/* JIF |
|
|
printf("Stat: %s\n", fullpath); */ |
|
850 |
if (stat(fullpath, &fstat)) |
if (stat(fullpath, &fstat)) |
851 |
{ |
{ |
852 |
perror("stat"); |
switch (errno) |
853 |
out_uint8(out, 0); |
{ |
854 |
return STATUS_ACCESS_DENIED; |
case ENOENT: |
855 |
|
case ELOOP: |
856 |
|
case EACCES: |
857 |
|
/* These are non-fatal errors. */ |
858 |
|
memset(&fstat, 0, sizeof(fstat)); |
859 |
|
break; |
860 |
|
default: |
861 |
|
/* Fatal error. By returning STATUS_NO_SUCH_FILE, |
862 |
|
the directory list operation will be aborted */ |
863 |
|
perror(fullpath); |
864 |
|
out_uint8(out, 0); |
865 |
|
return STATUS_NO_SUCH_FILE; |
866 |
|
} |
867 |
} |
} |
868 |
|
|
869 |
if (S_ISDIR(fstat.st_mode)) |
if (S_ISDIR(fstat.st_mode)) |