gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] gawk branch, gawk-5.2-stable, updated. gawk-4.1.0-5065-gf36f9655


From: Arnold Robbins
Subject: [SCM] gawk branch, gawk-5.2-stable, updated. gawk-4.1.0-5065-gf36f9655
Date: Sun, 28 May 2023 14:52:06 -0400 (EDT)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, gawk-5.2-stable has been updated
       via  f36f9655397606d614f132add22768d12238b3ef (commit)
       via  c5e5f3a0474d417936f89e8951a2b96bd19399ab (commit)
      from  84e5c8971aad5ba87ff1c8bf3ce5297d92cef27f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=f36f9655397606d614f132add22768d12238b3ef

commit f36f9655397606d614f132add22768d12238b3ef
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Sun May 28 21:51:46 2023 +0300

    Update manual on readdir extension.

diff --git a/doc/ChangeLog b/doc/ChangeLog
index 64ca24b5..d112b5e4 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2023-05-28         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * gawktexi.in (Extension Sample Readdir): Updated.
+
 2023-05-24         Arnold D. Robbins     <arnold@skeeve.com>
 
        * gawktexi.in: Small fixes.
diff --git a/doc/gawk.info b/doc/gawk.info
index 4299b409..dd8550f7 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -29452,12 +29452,11 @@ is as follows:
 on the command line (or with ‘getline’), they are read, with each entry
 returned as a record.
 
-   The record consists of three fields.  The first two are the inode
-number and the file name, separated by a forward slash character.  On
-systems where the directory entry contains the file type, the record has
-a third field (also separated by a slash), which is a single letter
-indicating the type of the file.  The letters and their corresponding
-file types are shown in *note Table 17.4: table-readdir-file-types.
+   The record consists of three fields separated by forward slash
+characters.  The first two are the inode number and the file name, and
+the third field is a single letter indicating the type of the file.  The
+letters and their corresponding file types are shown in *note Table
+17.4: table-readdir-file-types.
 
 
 Letter  File type
@@ -29469,17 +29468,14 @@ Letter  File type
 ‘l’     Symbolic link
 ‘p’     Named pipe (FIFO)
 ‘s’     Socket
-‘u’     Anything else (unknown)
 
 Table 17.4: File types returned by the ‘readdir’ extension
 
-   On systems without the file type information, the third field is
-always ‘u’.
-
-     NOTE: On GNU/Linux systems, there are filesystems that don’t
-     support the ‘d_type’ entry (see the readdir(3) manual page), and so
-     the file type is always ‘u’.  You can use the ‘filefuncs’ 
extension
-     to call ‘stat()’ in order to get correct type information.
+   On systems where the directory entry contains the file type, the
+third field is filled in from that information.  On systems without the
+file type information, the extension falls back to calling the ‘stat()’
+system call in order to provide the information.  Thus the third field
+should never be ‘u’ (for “unknown”).
 
    By default, if a directory cannot be opened (due to permission
 problems, for example), ‘gawk’ will exit.  As with regular files, this
@@ -39918,96 +39914,96 @@ Node: Extension Sample Fork1229553
 Node: Extension Sample Inplace1230829
 Node: Extension Sample Ord1234501
 Node: Extension Sample Readdir1235377
-Ref: table-readdir-file-types1236274
-Node: Extension Sample Revout1237412
-Node: Extension Sample Rev2way1238009
-Node: Extension Sample Read write array1238761
-Node: Extension Sample Readfile1242035
-Node: Extension Sample Time1243166
-Node: Extension Sample API Tests1245456
-Node: gawkextlib1245964
-Node: Extension summary1249000
-Node: Extension Exercises1252858
-Node: Language History1254136
-Node: V7/SVR3.11255850
-Node: SVR41258200
-Node: POSIX1259732
-Node: BTL1261157
-Node: POSIX/GNU1261926
-Node: Feature History1268457
-Node: Common Extensions1287575
-Node: Ranges and Locales1288944
-Ref: Ranges and Locales-Footnote-11293745
-Ref: Ranges and Locales-Footnote-21293772
-Ref: Ranges and Locales-Footnote-31294011
-Node: Contributors1294234
-Node: History summary1300439
-Node: Installation1301885
-Node: Gawk Distribution1302849
-Node: Getting1303341
-Node: Extracting1304340
-Node: Distribution contents1306052
-Node: Unix Installation1314132
-Node: Quick Installation1314954
-Node: Compiling with MPFR1317500
-Node: Shell Startup Files1318206
-Node: Additional Configuration Options1319363
-Node: Configuration Philosophy1321750
-Node: Compiling from Git1324252
-Node: Building the Documentation1324811
-Node: Non-Unix Installation1326223
-Node: PC Installation1326699
-Node: PC Binary Installation1327572
-Node: PC Compiling1328477
-Node: PC Using1329655
-Node: Cygwin1333383
-Node: MSYS1334639
-Node: OpenVMS Installation1335271
-Node: OpenVMS Compilation1335952
-Ref: OpenVMS Compilation-Footnote-11337435
-Node: OpenVMS Dynamic Extensions1337497
-Node: OpenVMS Installation Details1339133
-Node: OpenVMS Running1341568
-Node: OpenVMS GNV1345705
-Node: Bugs1346460
-Node: Bug definition1347384
-Node: Bug address1351035
-Node: Usenet1354626
-Node: Performance bugs1355857
-Node: Asking for help1358875
-Node: Maintainers1360866
-Node: Other Versions1361893
-Node: Installation summary1371236
-Node: Notes1372620
-Node: Compatibility Mode1373430
-Node: Additions1374252
-Node: Accessing The Source1375197
-Node: Adding Code1376732
-Node: New Ports1383868
-Node: Derived Files1388378
-Ref: Derived Files-Footnote-11394225
-Ref: Derived Files-Footnote-21394260
-Ref: Derived Files-Footnote-31394877
-Node: Future Extensions1394991
-Node: Implementation Limitations1395663
-Node: Extension Design1396905
-Node: Old Extension Problems1398069
-Ref: Old Extension Problems-Footnote-11399645
-Node: Extension New Mechanism Goals1399706
-Ref: Extension New Mechanism Goals-Footnote-11403202
-Node: Extension Other Design Decisions1403403
-Node: Extension Future Growth1405602
-Node: Notes summary1406226
-Node: Basic Concepts1407439
-Node: Basic High Level1408124
-Ref: figure-general-flow1408406
-Ref: figure-process-flow1409113
-Ref: Basic High Level-Footnote-11412514
-Node: Basic Data Typing1412703
-Node: Glossary1416121
-Node: Copying1449243
-Node: GNU Free Documentation License1487004
-Node: Index1512327
+Ref: table-readdir-file-types1236166
+Node: Extension Sample Revout1237221
+Node: Extension Sample Rev2way1237818
+Node: Extension Sample Read write array1238570
+Node: Extension Sample Readfile1241844
+Node: Extension Sample Time1242975
+Node: Extension Sample API Tests1245265
+Node: gawkextlib1245773
+Node: Extension summary1248809
+Node: Extension Exercises1252667
+Node: Language History1253945
+Node: V7/SVR3.11255659
+Node: SVR41258009
+Node: POSIX1259541
+Node: BTL1260966
+Node: POSIX/GNU1261735
+Node: Feature History1268266
+Node: Common Extensions1287384
+Node: Ranges and Locales1288753
+Ref: Ranges and Locales-Footnote-11293554
+Ref: Ranges and Locales-Footnote-21293581
+Ref: Ranges and Locales-Footnote-31293820
+Node: Contributors1294043
+Node: History summary1300248
+Node: Installation1301694
+Node: Gawk Distribution1302658
+Node: Getting1303150
+Node: Extracting1304149
+Node: Distribution contents1305861
+Node: Unix Installation1313941
+Node: Quick Installation1314763
+Node: Compiling with MPFR1317309
+Node: Shell Startup Files1318015
+Node: Additional Configuration Options1319172
+Node: Configuration Philosophy1321559
+Node: Compiling from Git1324061
+Node: Building the Documentation1324620
+Node: Non-Unix Installation1326032
+Node: PC Installation1326508
+Node: PC Binary Installation1327381
+Node: PC Compiling1328286
+Node: PC Using1329464
+Node: Cygwin1333192
+Node: MSYS1334448
+Node: OpenVMS Installation1335080
+Node: OpenVMS Compilation1335761
+Ref: OpenVMS Compilation-Footnote-11337244
+Node: OpenVMS Dynamic Extensions1337306
+Node: OpenVMS Installation Details1338942
+Node: OpenVMS Running1341377
+Node: OpenVMS GNV1345514
+Node: Bugs1346269
+Node: Bug definition1347193
+Node: Bug address1350844
+Node: Usenet1354435
+Node: Performance bugs1355666
+Node: Asking for help1358684
+Node: Maintainers1360675
+Node: Other Versions1361702
+Node: Installation summary1371045
+Node: Notes1372429
+Node: Compatibility Mode1373239
+Node: Additions1374061
+Node: Accessing The Source1375006
+Node: Adding Code1376541
+Node: New Ports1383677
+Node: Derived Files1388187
+Ref: Derived Files-Footnote-11394034
+Ref: Derived Files-Footnote-21394069
+Ref: Derived Files-Footnote-31394686
+Node: Future Extensions1394800
+Node: Implementation Limitations1395472
+Node: Extension Design1396714
+Node: Old Extension Problems1397878
+Ref: Old Extension Problems-Footnote-11399454
+Node: Extension New Mechanism Goals1399515
+Ref: Extension New Mechanism Goals-Footnote-11403011
+Node: Extension Other Design Decisions1403212
+Node: Extension Future Growth1405411
+Node: Notes summary1406035
+Node: Basic Concepts1407248
+Node: Basic High Level1407933
+Ref: figure-general-flow1408215
+Ref: figure-process-flow1408922
+Ref: Basic High Level-Footnote-11412323
+Node: Basic Data Typing1412512
+Node: Glossary1415930
+Node: Copying1449052
+Node: GNU Free Documentation License1486813
+Node: Index1512136
 
 End Tag Table
 
diff --git a/doc/gawk.texi b/doc/gawk.texi
index e943d381..883118cf 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -40169,12 +40169,10 @@ When this extension is in use, instead of skipping 
directories named
 on the command line (or with @code{getline}),
 they are read, with each entry returned as a record.
 
-The record consists of three fields. The first two are the inode number and the
-@value{FN}, separated by a forward slash character.
-On systems where the directory entry contains the file type, the record
-has a third field (also separated by a slash), which is a single letter
-indicating the type of the file. The letters and their corresponding file
-types are shown in @ref{table-readdir-file-types}.
+The record consists of three fields separated by forward slash characters.
+The first two are the inode number and the @value{FN}, and the third field
+is a single letter indicating the type of the file.  The letters and their
+corresponding file types are shown in @ref{table-readdir-file-types}.
 
 @float Table,table-readdir-file-types
 @caption{File types returned by the @code{readdir} extension}
@@ -40187,19 +40185,15 @@ types are shown in @ref{table-readdir-file-types}.
 @item @code{l} @tab Symbolic link
 @item @code{p} @tab Named pipe (FIFO)
 @item @code{s} @tab Socket
-@item @code{u} @tab Anything else (unknown)
 @end multitable
 @end float
 
-On systems without the file type information, the third field is always
-@samp{u}.
-
-@quotation NOTE
-On GNU/Linux systems, there are filesystems that don't support the
-@code{d_type} entry (see the @i{readdir}(3) manual page), and so the file
-type is always @samp{u}.  You can use the @code{filefuncs} extension to call
-@code{stat()} in order to get correct type information.
-@end quotation
+On systems where the directory entry contains the file type, the third
+field is filled in from that information.
+On systems without the file type information, the extension falls back
+to calling the @code{stat()} system call
+in order to provide the information.
+Thus the third field should never be @samp{u} (for ``unknown'').
 
 By default, if a directory cannot be opened (due to permission problems,
 for example), @command{gawk} will exit.  As with regular files, this
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index cde3c228..ef2be684 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -39085,12 +39085,10 @@ When this extension is in use, instead of skipping 
directories named
 on the command line (or with @code{getline}),
 they are read, with each entry returned as a record.
 
-The record consists of three fields. The first two are the inode number and the
-@value{FN}, separated by a forward slash character.
-On systems where the directory entry contains the file type, the record
-has a third field (also separated by a slash), which is a single letter
-indicating the type of the file. The letters and their corresponding file
-types are shown in @ref{table-readdir-file-types}.
+The record consists of three fields separated by forward slash characters.
+The first two are the inode number and the @value{FN}, and the third field
+is a single letter indicating the type of the file.  The letters and their
+corresponding file types are shown in @ref{table-readdir-file-types}.
 
 @float Table,table-readdir-file-types
 @caption{File types returned by the @code{readdir} extension}
@@ -39103,19 +39101,15 @@ types are shown in @ref{table-readdir-file-types}.
 @item @code{l} @tab Symbolic link
 @item @code{p} @tab Named pipe (FIFO)
 @item @code{s} @tab Socket
-@item @code{u} @tab Anything else (unknown)
 @end multitable
 @end float
 
-On systems without the file type information, the third field is always
-@samp{u}.
-
-@quotation NOTE
-On GNU/Linux systems, there are filesystems that don't support the
-@code{d_type} entry (see the @i{readdir}(3) manual page), and so the file
-type is always @samp{u}.  You can use the @code{filefuncs} extension to call
-@code{stat()} in order to get correct type information.
-@end quotation
+On systems where the directory entry contains the file type, the third
+field is filled in from that information.
+On systems without the file type information, the extension falls back
+to calling the @code{stat()} system call
+in order to provide the information.
+Thus the third field should never be @samp{u} (for ``unknown'').
 
 By default, if a directory cannot be opened (due to permission problems,
 for example), @command{gawk} will exit.  As with regular files, this

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=c5e5f3a0474d417936f89e8951a2b96bd19399ab

commit c5e5f3a0474d417936f89e8951a2b96bd19399ab
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Sun May 28 21:47:46 2023 +0300

    Finish fixing readdir.c and related doc and tests.

diff --git a/extension/ChangeLog b/extension/ChangeLog
index 85c3d3a8..ed88effa 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,8 @@
+2023-05-28         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * readdir.c: Add checking of PROCINFO["readdir_override"].
+       * readdir.3am: Updated.
+
 2023-05-25         Arnold D. Robbins     <arnold@skeeve.com>
 
        * readdir.c: Synced fully with readdir_test.c.
diff --git a/extension/readdir.3am b/extension/readdir.3am
index 531c65cf..3a2a4170 100644
--- a/extension/readdir.3am
+++ b/extension/readdir.3am
@@ -1,9 +1,11 @@
-.TH READDIR 3am "Oct 30 2019" "Free Software Foundation" "GNU Awk Extension 
Modules"
+.TH READDIR 3am "May 28 2023" "Free Software Foundation" "GNU Awk Extension 
Modules"
 .SH NAME
 readdir \- directory input parser for gawk
 .SH SYNOPSIS
 .ft CW
 @load "readdir"
+.sp
+BEGIN { PROCINFO["readdir_override"] = \fIany_value\fP }  # optional
 .ft R
 .SH DESCRIPTION
 The
@@ -16,10 +18,11 @@ on the command line (or with
 .BR getline ),
 they are read, with each entry returned as a record.
 .PP
-The record consists of three fields. The first two are the inode number and the
-filename, separated by a forward slash character.
-On systems where the directory entry contains the file type, the record
-has a third field which is a single letter indicating the type of the
+The record consists of three fields
+separated by forward slash characters.
+The first two are the inode number and the
+filename, and
+the third field is a single letter indicating the type of the
 file:
 .B f
 for file,
@@ -32,16 +35,25 @@ for a character device,
 .B p
 for a FIFO,
 .B l
-for a symbolic link,
+for a symbolic link, or
 .B s
 for a socket.
 .PP
+On systems where the directory entry contains the file type, the third
+field is filled in from that information.
 On systems without the file type information, the extension falls back
 to calling
 .IR stat (2),
 in order to provide the information.
 Thus the third field should never be
-.BR u .
+.BR u " (unknown)."
+.PP
+Normally, when reading directories, you should set
+.B FS
+equal to \fB"/"\fP.  However, you may instead chose to create
+\fBPROCINFO["readdir_override"]\fP (with any value). If this element
+exists, when the directory is opened, then the extension automatically
+sets the fields in each record for you.
 .PP
 By default, if a directory cannot be opened (due to permission problems,
 for example),
@@ -81,7 +93,7 @@ BEGIN { FS = "/" }
 Arnold Robbins,
 .BR arnold@skeeve.com .
 .SH COPYING PERMISSIONS
-Copyright \(co 2012, 2013, 2018, 2019
+Copyright \(co 2012, 2013, 2018, 2019, 2023
 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of
diff --git a/extension/readdir.c b/extension/readdir.c
index 45b19993..788e1d1e 100644
--- a/extension/readdir.c
+++ b/extension/readdir.c
@@ -42,6 +42,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <stdbool.h>
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -91,6 +92,7 @@ typedef struct open_directory {
                awk_fieldwidth_info_t fw;
                char buf[awk_fieldwidth_info_size(3)];
        } u;
+       bool override;
 } open_directory_t;
 #define fw u.fw
 
@@ -116,9 +118,7 @@ ftype(struct dirent *entry, const char *dirname)
        char fname[PATH_MAX];
        struct stat sbuf;
 
-       strcpy(fname, dirname);
-       strcat(fname, "/");
-       strcat(fname, entry->d_name);
+       sprintf(fname, "%s/%s", dirname, entry->d_name);
        if (stat(fname, &sbuf) == 0) {
                if (S_ISBLK(sbuf.st_mode))
                        return "b";
@@ -228,7 +228,7 @@ dir_get_record(char **out, awk_input_buf_t *iobuf, int 
*errcode,
 
        *rt_start = NULL;
        *rt_len = 0;    /* set RT to "" */
-       if (field_width)
+       if (field_width != NULL && the_dir->override)
                *field_width = & the_dir->fw;
        return len;
 }
@@ -309,6 +309,16 @@ dir_take_control_of(awk_input_buf_t *iobuf)
        iobuf->get_record = dir_get_record;
        iobuf->close_func = dir_close;
 
+       awk_value_t array, index, value;
+       static const char readdir_override[] = "readdir_override";
+
+       if (! sym_lookup("PROCINFO", AWK_ARRAY, & array)) {
+               the_dir->override = false;
+       } else {
+               (void) make_const_string(readdir_override, 
strlen(readdir_override), & index);
+               the_dir->override = get_array_element(array.array_cookie, & 
index, AWK_UNDEFINED, & value);
+       }
+
        return awk_true;
 }
 
diff --git a/pc/ChangeLog b/pc/ChangeLog
index 4c0782be..ac82cf68 100644
--- a/pc/ChangeLog
+++ b/pc/ChangeLog
@@ -1,3 +1,7 @@
+2023-05-28         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * Makefile.tst: Regenerated.
+
 2023-05-25         Arnold D. Robbins     <arnold@skeeve.com>
 
        * Makefile.tst: Regenerated.
diff --git a/pc/Makefile.tst b/pc/Makefile.tst
index 52602e62..609128b5 100644
--- a/pc/Makefile.tst
+++ b/pc/Makefile.tst
@@ -1099,7 +1099,7 @@ readdir:
 readdir_test:
        @echo $@
        @-$(AWK) -lreaddir -F$(SLASH) '{printf "[%s] [%s] [%s] [%s]\n", $$1, 
$$2, $$3, $$4}' "$(top_srcdir)" > $@.ok
-       @-$(AWK) -lreaddir '{printf "[%s] [%s] [%s] [%s]\n", $$1, $$2, $$3, 
$$4}' "$(top_srcdir)" > _$@
+       @-$(AWK) -lreaddir 'BEGIN { PROCINFO["readdir_override"] = 1} ; {printf 
"[%s] [%s] [%s] [%s]\n", $$1, $$2, $$3, $$4}' "$(top_srcdir)" > _$@
        @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@
 
 readdir_retest:
diff --git a/test/ChangeLog b/test/ChangeLog
index b060650f..845aa96f 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,7 @@
+2023-05-28         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * Makefile.am (readdir_test): Adjust comparison programs.
+
 2023-05-25         Arnold D. Robbins     <arnold@skeeve.com>
 
        Deal with removal of extension/readdir_test.c.
diff --git a/test/Makefile.am b/test/Makefile.am
index 4605547e..96abfe6f 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -2424,7 +2424,7 @@ readdir:
 readdir_test:
        @echo $@
        @-$(AWK) -lreaddir -F/ '{printf "[%s] [%s] [%s] [%s]\n", $$1, $$2, $$3, 
$$4}' "$(top_srcdir)" > $@.ok
-       @-$(AWK) -lreaddir '{printf "[%s] [%s] [%s] [%s]\n", $$1, $$2, $$3, 
$$4}' "$(top_srcdir)" > _$@
+       @-$(AWK) -lreaddir 'BEGIN { PROCINFO["readdir_override"] = 1} ; {printf 
"[%s] [%s] [%s] [%s]\n", $$1, $$2, $$3, $$4}' "$(top_srcdir)" > _$@
        @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@
 
 readdir_retest:
diff --git a/test/Makefile.in b/test/Makefile.in
index 4e7ff1d9..3bcaed5b 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -2878,7 +2878,7 @@ readdir:
 readdir_test:
        @echo $@
        @-$(AWK) -lreaddir -F/ '{printf "[%s] [%s] [%s] [%s]\n", $$1, $$2, $$3, 
$$4}' "$(top_srcdir)" > $@.ok
-       @-$(AWK) -lreaddir '{printf "[%s] [%s] [%s] [%s]\n", $$1, $$2, $$3, 
$$4}' "$(top_srcdir)" > _$@
+       @-$(AWK) -lreaddir 'BEGIN { PROCINFO["readdir_override"] = 1} ; {printf 
"[%s] [%s] [%s] [%s]\n", $$1, $$2, $$3, $$4}' "$(top_srcdir)" > _$@
        @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@
 
 readdir_retest:

-----------------------------------------------------------------------

Summary of changes:
 doc/ChangeLog         |   4 +
 doc/gawk.info         | 204 +++++++++++++++++++++++++-------------------------
 doc/gawk.texi         |  26 +++----
 doc/gawktexi.in       |  26 +++----
 extension/ChangeLog   |   5 ++
 extension/readdir.3am |  28 +++++--
 extension/readdir.c   |  18 ++++-
 pc/ChangeLog          |   4 +
 pc/Makefile.tst       |   2 +-
 test/ChangeLog        |   4 +
 test/Makefile.am      |   2 +-
 test/Makefile.in      |   2 +-
 12 files changed, 174 insertions(+), 151 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]