all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Francesco Potortì" <pot@gnu.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: Paul Eggert <eggert@cs.ucla.edu>, emacs-devel@gnu.org
Subject: Re: etags test is broken on MS-Windows
Date: Thu, 21 May 2015 15:24:44 +0200	[thread overview]
Message-ID: <E1YvQSq-0005SX-0e@tucano.isti.cnr.it> (raw)
In-Reply-To: <83a8wz6yyc.fsf@gnu.org>

>> (There's also an unrelated problem with the gzip-compressed file in
>> f-src, which seems to be some Windows-specific glitch; I will look
>> into it separately.)
>
>I found the reason for this: etags calls 'rewind' on a FILE stream
>that was created by 'popen', which is non-portable, AFAIK.  On
>Windows, that caused the initial portions of the input to be skipped
>by etags, i.e. some symbols were not tagged.
>
>There are a few comments about that in the source, like this:
>
>  /* We rewind here, even if inf may be a pipe.  We fail if the
>     length of the first line is longer than the pipe block size,
>     which is unlikely. */
>  rewind (inf);
>
>These comments notwithstanding, it sounds like etags expects this to
>work satisfactorily at least on GNU/Linux, and at least when "length
>of the first line is not longer than the pipe block size", otherwise I
>don't understand why the test suite includes gzip-compressed files
>(Francesco?).

Yes, that's it.  I implemented the gzip feature myself, and I included
tests for it.  A source file should produce the same tags whether
compressed or not.

>So, on the assumption that this does work on Posix hosts, at least
>those that use glibc, I hacked etags to provide a Windows-specific
>replacement for 'rewind' that supports this expectation, assuming the
>stuff read and buffered before the call to 'rewind' is less than a
>full buffer of the FILE object.  Then the Windows build no longer
>misses symbols in the first part of the compressed files.
>
>However, now I see something strange in the ETAGS.good files, which
>AFAIU were produced by Paul on a Posix host.  Please look at this
>excerpt from ETAGS.good_1:
>
>f-src/entry.for,172
>      LOGICAL FUNCTION PRTPKG ^?3,75
>       ENTRY  SETPRT ^?194,3866
>       ENTRY  MSGSEL ^?395,8478
>     & intensity1(^?577,12231
>       character*(*) function foo(^?579,12307
>^L
>f-src/entry.strange_suffix,172
>      LOGICAL FUNCTION PRTPKG ^?3,75
>       ENTRY  SETPRT ^?194,3866
>       ENTRY  MSGSEL ^?395,8478
>     & intensity1(^?577,12231
>       character*(*) function foo(^?579,12307
>^L
>f-src/entry.strange,171
>      LOGICAL FUNCTION PRTPKG ^?2,2
>       ENTRY  SETPRT ^?193,3793
>       ENTRY  MSGSEL ^?394,8405
>     & intensity1(^?576,12158
>       character*(*) function foo(^?578,12234
>
>Now, these 3 files have exactly identical contents, and the _only_
>difference between the first 2 and the 3rd is that the latter is
>gzip-compressed.  So that should be the only reason why all its line
>counts are off by 1, and its byte counts are all off by 73, which just
>happens to be the length of the first line of the (uncompressed) file.

This is a bug.

>So could it be that rewinding a 'popen'-created stream doesn't work
>correctly on GNU/Linux as well?  If so, we will have to make changes
>in etags to not do that, I think, and instead reuse the already-read
>stuff as needed.

It could well be.  It may have happened that, when I checked that the
TAGS files were the same, I just looked at them without running diff and
I missed this discrepancy.



  parent reply	other threads:[~2015-05-21 13:24 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <83y4kmdjmj.fsf@gnu.org>
     [not found] ` <555A8E62.7060700@cs.ucla.edu>
2015-05-19 15:27   ` etags test is broken on MS-Windows Eli Zaretskii
2015-05-19 17:57     ` Paul Eggert
2015-05-19 18:26       ` Eli Zaretskii
2015-05-20 15:38     ` Eli Zaretskii
2015-05-21  5:05       ` Paul Eggert
2015-05-21 13:24       ` Francesco Potortì [this message]
2015-05-21 16:49         ` Eli Zaretskii
2015-05-23  8:46           ` Eli Zaretskii
2015-05-21 13:16     ` Francesco Potortì
2015-05-21 16:31       ` Eli Zaretskii
2015-05-21 16:37         ` Paul Eggert
2015-05-21 16:55           ` Eli Zaretskii
2015-05-21 19:03             ` Paul Eggert
2015-05-21 19:54               ` Eli Zaretskii
2015-05-21 23:28                 ` Paul Eggert
2015-05-22  8:32                   ` Eli Zaretskii
2015-05-22 13:08                     ` Francesco Potortì
2015-05-22 13:19                       ` Eli Zaretskii
2015-05-22 18:23                         ` Paul Eggert
2015-05-22 19:08                           ` Eli Zaretskii
2015-05-22 19:25                             ` Andreas Schwab
2015-05-22 19:38                               ` Eli Zaretskii
2015-05-22 19:41                                 ` Andreas Schwab
2015-05-22 19:42                                 ` Eli Zaretskii
2015-05-22 19:50                                   ` Andreas Schwab
2015-05-22 20:05                                     ` Eli Zaretskii
2015-05-22 20:30                                       ` Andreas Schwab
2015-05-22 21:26                                         ` Paul Eggert
2015-05-23  6:40                                           ` Eli Zaretskii
2015-05-23  6:39                                         ` Eli Zaretskii
2015-05-23  8:02                                           ` Andreas Schwab
2015-05-23  8:27                                             ` Eli Zaretskii
2015-05-23  9:41                                               ` Andreas Schwab
2015-05-23  9:49                                                 ` Eli Zaretskii
2015-05-23  9:59                                                   ` Andreas Schwab
2015-05-23 10:20                                                     ` Eli Zaretskii
2015-05-23 10:54                                                       ` Andreas Schwab
2015-05-23 11:31                                                         ` Eli Zaretskii
2015-05-23 12:10                                                           ` Andreas Schwab
2015-05-23 13:46                                                             ` Eli Zaretskii
2015-05-23 17:27                                                               ` Andreas Schwab
2015-05-23 17:37                                                                 ` Eli Zaretskii
2015-05-23 18:46                                                                   ` Andreas Schwab
2015-05-23 19:04                                                                     ` Eli Zaretskii
2015-05-25 12:33                                                                       ` Francesco Potortì
2015-05-23 19:01                                                               ` Paul Eggert
2015-05-23 19:27                                                                 ` Eli Zaretskii
2015-05-25 16:44                                                                   ` Paul Eggert
2015-05-25 19:33                                                                     ` Eli Zaretskii
2015-05-25 20:29                                                                       ` Paul Eggert
2015-05-22 12:40               ` Francesco Potortì

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E1YvQSq-0005SX-0e@tucano.isti.cnr.it \
    --to=pot@gnu.org \
    --cc=eggert@cs.ucla.edu \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.