Show More
@@ -7,9 +7,7 | |||
|
7 | 7 | the GNU General Public License, incorporated herein by reference. |
|
8 | 8 | */ |
|
9 | 9 | |
|
10 | #define _ATFILE_SOURCE | |
|
11 | 10 | #include <Python.h> |
|
12 | #include <alloca.h> | |
|
13 | 11 | #include <dirent.h> |
|
14 | 12 | #include <fcntl.h> |
|
15 | 13 | #include <string.h> |
@@ -101,18 +99,6 static PyTypeObject listdir_stat_type = | |||
|
101 | 99 | listdir_stat_new, /* tp_new */ |
|
102 | 100 | }; |
|
103 | 101 | |
|
104 | static inline int mode_to_kind(int mode) | |
|
105 | { | |
|
106 | if (S_ISREG(mode)) return S_IFREG; | |
|
107 | if (S_ISDIR(mode)) return S_IFDIR; | |
|
108 | if (S_ISLNK(mode)) return S_IFLNK; | |
|
109 | if (S_ISBLK(mode)) return S_IFBLK; | |
|
110 | if (S_ISCHR(mode)) return S_IFCHR; | |
|
111 | if (S_ISFIFO(mode)) return S_IFIFO; | |
|
112 | if (S_ISSOCK(mode)) return S_IFSOCK; | |
|
113 | return mode; | |
|
114 | } | |
|
115 | ||
|
116 | 102 | static PyObject *listfiles(PyObject *list, DIR *dir, |
|
117 | 103 | int keep_stat, int *need_stat) |
|
118 | 104 | { |
@@ -187,9 +173,6 static PyObject *statfiles(PyObject *lis | |||
|
187 | 173 | int ret; |
|
188 | 174 | ssize_t i; |
|
189 | 175 | ssize_t size = PyList_Size(list); |
|
190 | #ifdef AT_SYMLINK_NOFOLLOW | |
|
191 | int dfd = dirfd(dir); | |
|
192 | #endif | |
|
193 | 176 | |
|
194 | 177 | for (i = 0; i < size; i++) { |
|
195 | 178 | PyObject *elt = PyList_GetItem(list, i); |
@@ -213,17 +196,29 static PyObject *statfiles(PyObject *lis | |||
|
213 | 196 | PyTuple_SET_ITEM(elt, 2, py_st); |
|
214 | 197 | } |
|
215 | 198 | |
|
216 | #ifdef AT_SYMLINK_NOFOLLOW | |
|
217 | ret = fstatat(dfd, name, stp, AT_SYMLINK_NOFOLLOW); | |
|
218 | #else | |
|
219 | 199 | ret = lstat(path, stp); |
|
220 | #endif | |
|
221 | 200 | if (ret == -1) |
|
222 | 201 | return PyErr_SetFromErrnoWithFilename(PyExc_OSError, |
|
223 | 202 | path); |
|
224 | 203 | |
|
225 | if (kind == -1) | |
|
226 |
|
|
|
204 | if (kind == -1) { | |
|
205 | if (S_ISREG(stp->st_mode)) | |
|
206 | kind = S_IFREG; | |
|
207 | else if (S_ISDIR(stp->st_mode)) | |
|
208 | kind = S_IFDIR; | |
|
209 | else if (S_ISLNK(stp->st_mode)) | |
|
210 | kind = S_IFLNK; | |
|
211 | else if (S_ISBLK(stp->st_mode)) | |
|
212 | kind = S_IFBLK; | |
|
213 | else if (S_ISCHR(stp->st_mode)) | |
|
214 | kind = S_IFCHR; | |
|
215 | else if (S_ISFIFO(stp->st_mode)) | |
|
216 | kind = S_IFIFO; | |
|
217 | else if (S_ISSOCK(stp->st_mode)) | |
|
218 | kind = S_IFSOCK; | |
|
219 | else | |
|
220 | kind = stp->st_mode; | |
|
221 | } | |
|
227 | 222 | |
|
228 | 223 | if (py_kind == Py_None && kind != -1) { |
|
229 | 224 | py_kind = PyInt_FromLong(kind); |
General Comments 0
You need to be logged in to leave comments.
Login now