[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 メーリングリストの案内