[Mew-dist 13662] stat() について

SAKAI Kiyotaka ksakai at example.com
2000年 7月 17日 (月) 19:00:55 JST


もし、stat()/fstat() があまりに時間がかかってしまうのであれば、以下の
パッチのように stat()/fstat() を実行しないオプションを提供するのも 1つ
の手かと思います。

というのは、stat()/fstat() を実行しているのは、数字からのみなるディレ
クトリがあった場合にそれを skip する目的で実行していますが、もしユーザー
が「数字からのみなる folder は使用しない」と決めて運用しているのであれ
ば、そもそもそのチェックは必要ないからです。
-- 
酒井 清隆 (E-mail: ksakai at example.com)
-------------- next part --------------
Index: mewls.c
===================================================================
RCS file: /home/ksakai/cvsroot/mew-1.95b47/bin/mewls.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 mewls.c
--- mewls.c	2000/07/17 00:32:42	1.1.1.1
+++ mewls.c	2000/07/17 09:39:31
@@ -49,6 +49,7 @@
 char hbuf[BSIZ];
 
 int First = 0, Last = 0;
+int use_stat = 1;
 
 char *
 expandfolder(char *fld) {
@@ -241,11 +242,13 @@
 		sprintf(fnbuf, "%d", *(list + i));
 		fp = fopen(fnbuf, "r");
 		if (fp == NULL) continue;
-		fstat(fileno(fp), &st);
-                if (!(st.st_mode & S_IFREG)) {
-			fclose(fp);
-			continue;
-                }
+		if (use_stat) {
+			fstat(fileno(fp), &st);
+			if (!(st.st_mode & S_IFREG)) {
+				fclose(fp);
+				continue;
+			}
+		}
 		dumpheader(fp, fnbuf);
 		fclose(fp);
 	}
@@ -291,6 +294,7 @@
 
 char *help_message[] = {
 	" -s  --src              Message source.",
+	" -n  --nostat           Don's use fstat().",
 	" -h  --help             Display this help message.",
 	" -v  --version          Display the version.",
 	NULL
@@ -313,6 +317,7 @@
 
 struct option longopts [] = {
 	{"src",      1, 0, 's'},
+	{"nostat",   0, 0, 'n'},
 	{"help",     0, 0, 'h'},
 	{"version",  0, 0, 'v'},    
 	{0, 0, 0, 0}
@@ -330,12 +335,15 @@
 	/*char *progname = argv[0];*/
 	int index = 0;
 
-	while ((optc = getopt_long(argc, argv, "shv", longopts, (int *)0)) != EOF)
+	while ((optc = getopt_long(argc, argv, "snhv", longopts, (int *)0)) != EOF)
 	{
 		switch (optc) {
 		case 's':
 			if (index < MAX_FOLDER)
 				dir[index++] = optarg;
+			break;
+		case 'n':
+			use_stat = 0;
 			break;
 		case 'h':
 			help(progname);


Mew-dist メーリングリストの案内