2 * (c) Oleg Puchinin 2006
3 * graycardinalster@gmail.com
9 #include <sys/syscall.h>
12 __export
int Dreaddir_r (char * NAME
, dirent
** OUTDIR
)
17 dirent
* m_dirent
= NULL
;
18 dirent
* m_alldirent
= NULL
;
21 m_dir
= opendir (NAME
);
30 m_alldirent
= CNEW(dirent
, count
);
34 for (; i
< count
; i
++) {
35 m_dirent
= readdir (m_dir
);
39 memcpy (&m_alldirent
[i
], m_dirent
, sizeof (struct dirent
));
46 m_alldirent
= (dirent
*) gc_realloc ((char *)m_alldirent
,
47 count
* sizeof (struct dirent
),
48 (count
<< 1) * sizeof (struct dirent
));
55 *OUTDIR
= m_alldirent
;
61 __export DArray
* Dlstat_r (DArray
* m_names
)
63 DArray
* m_array
= new DArray
;
70 for (i
= 0; i
< m_names
->get_size (); i
++) {
71 m_stat
= new struct stat
;
72 lstat (m_names
->get (i
), m_stat
);
73 m_array
->add (LPCHAR (m_stat
));
80 __export DArray
* Dstat_r (char *__from
, dirent
* m_dirents
, int count
)
82 DArray
* m_array
= new DArray
;
87 if ((! m_dirents
) || (! __from
))
90 for (i
= 0; i
< count
; i
++) {
91 m_stat
= new struct stat
;
92 snprintf (m_name
, 4096, "%s/%s", __from
, m_dirents
[i
].d_name
);
93 stat (m_name
, m_stat
);
94 m_array
->add (LPCHAR (m_stat
));
102 __export DList
* Dreaddir_r (char * path
)
106 struct dirent
* m_dirent
;
111 m_dir
= opendir (path
);
117 m_dirent
= readdir (m_dir
);
120 m_dirent
= (struct dirent
*) memdup (m_dirent
, sizeof (struct dirent
));
121 Ret
->add_tail (LPCHAR (m_dirent
));
129 __export DArray
* Dfiles (char * path
)
133 struct dirent
* m_dirent
;
138 m_dir
= opendir (path
);
144 m_dirent
= readdir (m_dir
);
147 m_dirent
= (struct dirent
*) memdup (m_dirent
, sizeof (struct dirent
));
148 Ret
->add (LPCHAR (strdup (m_dirent
->d_name
)));
156 #ifdef __NR_fadvise64
157 int Dposix_fadvise (int fd
, int offset
, int len
, int advice
)
159 return posix_fadvise (fd
, offset
, len
, advice
);
160 // return syscall (__NR_fadvise64, fd, 0, offset, len, advice);
163 int Dposix_fadvise (int fd
, int offset
, int len
, int advice
)
165 #warning "Dposix_fadvise is broken.\n"