aboutsummaryrefslogtreecommitdiff
path: root/readdir/src
diff options
context:
space:
mode:
Diffstat (limited to 'readdir/src')
-rw-r--r--readdir/src/config.h.in31
-rw-r--r--readdir/src/readdir-help.pd51
-rw-r--r--readdir/src/readdir.c53
3 files changed, 89 insertions, 46 deletions
diff --git a/readdir/src/config.h.in b/readdir/src/config.h.in
index 4496bb9..5e86779 100644
--- a/readdir/src/config.h.in
+++ b/readdir/src/config.h.in
@@ -1,5 +1,33 @@
/* src/config.h.in. Generated from configure.ac by autoheader. */
+/* Define to 1 if you have the declaration of `DT_BLK', and to 0 if you don't.
+ */
+#undef HAVE_DECL_DT_BLK
+
+/* Define to 1 if you have the declaration of `DT_CHR', and to 0 if you don't.
+ */
+#undef HAVE_DECL_DT_CHR
+
+/* Define to 1 if you have the declaration of `DT_DIR', and to 0 if you don't.
+ */
+#undef HAVE_DECL_DT_DIR
+
+/* Define to 1 if you have the declaration of `DT_FIFO', and to 0 if you
+ don't. */
+#undef HAVE_DECL_DT_FIFO
+
+/* Define to 1 if you have the declaration of `DT_REG', and to 0 if you don't.
+ */
+#undef HAVE_DECL_DT_REG
+
+/* Define to 1 if you have the declaration of `DT_SOCK', and to 0 if you
+ don't. */
+#undef HAVE_DECL_DT_SOCK
+
+/* Define to 1 if you have the declaration of `DT_UNKNOWN', and to 0 if you
+ don't. */
+#undef HAVE_DECL_DT_UNKNOWN
+
/* Define to 1 if you have the <dirent.h> header file. */
#undef HAVE_DIRENT_H
@@ -12,6 +40,9 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
+/* Define to 1 if `d_type' is member of `struct dirent'. */
+#undef HAVE_STRUCT_DIRENT_D_TYPE
+
/* Name of package */
#undef PACKAGE
diff --git a/readdir/src/readdir-help.pd b/readdir/src/readdir-help.pd
index 65d3239..81335e7 100644
--- a/readdir/src/readdir-help.pd
+++ b/readdir/src/readdir-help.pd
@@ -1,41 +1,46 @@
-#N canvas 438 13 535 566 10;
+#N canvas 438 13 543 650 10;
#X msg 89 227 close;
#X msg 52 79 bang;
#X msg 83 160 tell;
#X obj 38 322 print dir-entry;
#X obj 82 294 print end-of-directory;
#X text 130 8 readdir : simple directory accessor;
-#X text 231 543 Bryan Jurish <moocow@ling.uni-potsdam.de>;
+#X text 245 617 Bryan Jurish <moocow@ling.uni-potsdam.de>;
#X text 157 46 open DIR : opens the directory DIR;
-#X text 185 75 bang : outlet next directory entry;
-#X text 185 91 next : ditto;
+#X text 185 80 bang : outlet next directory entry;
+#X text 185 101 next : ditto;
#X msg 59 101 next;
#X msg 71 137 rewind;
#X text 173 137 rewind : return to beginning of directory;
-#X text 188 158 tell : output current position;
-#X text 146 182 seek FLOAT : goto position FLOAT;
+#X text 187 160 tell : output current position;
+#X text 146 185 seek FLOAT : goto position FLOAT;
#X msg 86 184 seek 0;
-#X text 181 223 close : close directory;
+#X text 181 229 close : close directory;
#X text 258 295 2nd outlet bangs at end of directory;
#X text 260 325 Directory entries go to 1st outlet;
#X text 39 370 Directory entries appear as messages of the form TYPE
NAME \, where NAME is the name of the entry \, and TYPE is one of the
following:;
-#X text 65 515 unknown : something else;
-#X text 87 419 file : regular file;
-#X text 93 434 dir : subdirectory;
-#X text 86 450 fifo : named pipe;
-#X text 85 466 sock : local-domain socket;
-#X text 71 482 chrdev : character device;
-#X text 71 498 blkdev : block device;
+#X text 87 416 file : regular file;
+#X text 94 429 dir : subdirectory;
+#X text 87 442 fifo : named pipe;
+#X text 87 455 sock : local-domain socket;
+#X text 73 468 chrdev : character device;
+#X text 73 482 blkdev : block device;
#X obj 38 267 readdir;
#X msg 39 47 open /tmp;
-#X connect 0 0 27 0;
-#X connect 1 0 27 0;
-#X connect 2 0 27 0;
-#X connect 10 0 27 0;
-#X connect 11 0 27 0;
-#X connect 15 0 27 0;
-#X connect 27 0 3 0;
-#X connect 27 1 4 0;
-#X connect 28 0 27 0;
+#X text 66 495 unknown : something else (maybe a symlink);
+#X text 45 530 WARNING:;
+#X text 59 544 Recognition of directory entry types does NOT work on
+windows or any other system whose `dirent' struct is missing the `d_type'
+field. On such systems \, the TYPE selector on the first outlet is
+always the symbol `unknown'.;
+#X connect 0 0 26 0;
+#X connect 1 0 26 0;
+#X connect 2 0 26 0;
+#X connect 10 0 26 0;
+#X connect 11 0 26 0;
+#X connect 15 0 26 0;
+#X connect 26 0 3 0;
+#X connect 26 1 4 0;
+#X connect 27 0 26 0;
diff --git a/readdir/src/readdir.c b/readdir/src/readdir.c
index a2bdbb8..0dbd73d 100644
--- a/readdir/src/readdir.c
+++ b/readdir/src/readdir.c
@@ -93,7 +93,7 @@ static void readdir_close(t_readdir *x)
{
if (!x->x_dir) return;
if (0 != closedir(x->x_dir)) {
- error("readdir: cannot close %s: %s", x->x_dirname->s_name, strerror(errno));
+ pd_error(x, "readdir: cannot close %s: %s", x->x_dirname->s_name, strerror(errno));
return;
}
x->x_dir = NULL;
@@ -111,7 +111,7 @@ static void readdir_open(t_readdir *x, t_symbol *dirname)
if (x->x_dir) readdir_close(x);
if ( !(x->x_dir = opendir(dirname->s_name)) ) {
- error("readdir: cannot open %s: %s", dirname->s_name, strerror(errno));
+ pd_error(x, "readdir: cannot open %s: %s", dirname->s_name, strerror(errno));
return;
}
x->x_dirname = dirname;
@@ -127,7 +127,7 @@ static void readdir_next(t_readdir *x)
if ( !x->x_dir || !(result = readdir(x->x_dir)) ) {
if (errno == EBADF) {
//-- real error
- error("readdir: cannot read from %s: %s", x->x_dirname->s_name, strerror(errno));
+ pd_error(x, "readdir: cannot read from %s: %s", x->x_dirname->s_name, strerror(errno));
}
else {
//-- end of directory
@@ -136,37 +136,44 @@ static void readdir_next(t_readdir *x)
return;
}
- //-- get type
+#if HAVE_STRUCT_DIRENT_D_TYPE
+ //-- get type (if this OS supports it, e.g. if we're not on windoof)
switch (result->d_type)
{
- case DT_REG:
- sel = sp_file;
- break;
+#if HAVE_DECL_DT_REG
+ case DT_REG: sel = sp_file; break;
+#endif
- case DT_DIR:
- sel = sp_dir;
- break;
+#if HAVE_DECL_DT_DIR
+ case DT_DIR: sel = sp_dir; break;
+#endif
- case DT_FIFO:
- sel = sp_fifo;
- break;
+#if HAVE_DECL_DT_FIFO
+ case DT_FIFO: sel = sp_fifo; break;
+#endif
- case DT_SOCK:
- sel = sp_sock;
- break;
+#if HAVE_DECL_DT_SOCK
+ case DT_SOCK: sel = sp_sock; break;
+#endif
- case DT_CHR:
- sel = sp_chrdev;
- break;
+#if HAVE_DECL_DT_CHR
+ case DT_CHR: sel = sp_chrdev; break;
+#endif
- case DT_BLK:
- sel = sp_blkdev;
- break;
+#if HAVE_DECL_DT_BLK
+ case DT_BLK: sel = sp_blkdev; break;
+#endif
+#if HAVE_DECL_DT_UNKNOWN
+ case DT_UNKNOWN:
+#endif
default:
sel = sp_unknown;
break;
}
+#else /* if !HAVE_STRUCT_DIRENT_D_TYPE */
+ sel = sp_unknown;
+#endif /* HAVE_STRUCT_DIRENT_D_TYPE */
x->x_eatom.a_w.w_symbol = gensym(result->d_name);
outlet_anything(x->x_ent_outlet, sel, 1, &x->x_eatom);
@@ -199,7 +206,7 @@ static void readdir_tell(t_readdir *x)
static void readdir_seek(t_readdir *x, t_floatarg pos)
{
if (!x->x_dir) {
- error("readdir: seek %f: no directory opened!", pos);
+ pd_error(x, "readdir: seek %g: no directory opened!", pos);
return;
}
seekdir(x->x_dir, (off_t)pos);