[Mew-dist 11671] Re: mls
SAKAI Kiyotaka
ksakai at example.com
1999年 12月 7日 (火) 15:25:42 JST
>> In article <19991207151926I.yamagus at example.com>, YAMAGUCHI Shuhei <yamagus at example.com> writes:
> Cygnus 20.1 ですが、添付したログのようになり、コンパイルは失敗します。
> 二度 make してますが、二度目は <dirent.h> を include するようソースを
> いじった後のものです。
> やはり d_namlen と d_type が鬼門のようです。
とりあえず SunOS 4.1.4 では、以下の修正で動きました。
d_namlen は autoconf.info に書かれているように、以下のパッチのように処
理すればいいと思います。ただ、d_type の方は、どう処理していいか分から
ないので、とりあえず #if 0 〜 #endif で囲ってあります。
あと、SunOS 4.1.4 には isnumber() はなかったので、isdigit() に変更して
あります。
ただし、folder にあるメールの数が少ないときはいいのですが、何百通もの
メールがあると scandir() の中で segumentation fault で落ちてしまいます。
あと、Solaris 2.6 の方はリンク時に scandir() がないと言われてしまいま
す。
--
酒井 清隆 (E-mail: ksakai at example.com)
-------------- next part --------------
===================================================================
RCS file: RCS/mls.c,v
retrieving revision 1.1
diff -u -r1.1 mls.c
--- mls.c 1999/12/07 05:34:19 1.1
+++ mls.c 1999/12/07 06:05:19
@@ -11,7 +11,20 @@
#include <ctype.h>
#if HAVE_DIRENT_H
-#include <dirent.h>
+# include <dirent.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
+#else
+# define dirent direct
+# define NAMLEN(dirent) (dirent)->d_namlen
+# if HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+# include <ndir.h>
+# endif
#endif
#include <pwd.h>
@@ -30,14 +43,16 @@
int
selectnum(struct dirent *dp) {
char *c = dp->d_name;
- char *lim = c + dp->d_namlen;
+ char *lim = c + NAMLEN(dp);
int ret = 1;
+#if 0
if (dp->d_type != DT_REG)
return 0;
+#endif
while (c < lim) {
- if (! isnumber(*c)) {
+ if (! isdigit(*c)) {
ret = 0;
break;
}
@@ -174,7 +189,7 @@
exit(EXIT_FAILURE);
}
-void
+int
main (int argc, char **argv)
{
char *dir;
Mew-dist メーリングリストの案内