Subject: Re: [bug-diffutils] bug#19186: [PATCH] OS/2 patches

From: KO Myung-Hun <[email-masked]>
Date: Sat, 13 Dec 2014 13:18:47 +0900

Jim Meyering wrote:
> On Fri, Dec 12, 2014 at 7:24 PM, KO Myung-Hun <[email-masked]> wrote:
>>
>>
>> Jim Meyering wrote:
>>> On Wed, Dec 10, 2014 at 9:37 PM, KO Myung-Hun <[email-masked]> wrote:
>>>> Jim Meyering wrote:
>>>>> On Tue, Nov 25, 2014 at 6:29 PM, KO Myung-Hun <[email-masked]> wrote:
>>>>>> Hi/2.
>>>>>>
>>>>>> These are OS/2 patches.
>>>>>>
>>>>>> Review, please...
>>>>>>
>>>>>> [PATCH 1/2] build: use quotation mark(") for PATH
>>>>>> [PATCH 2/2] diff: skip test if seek is not possible on OS/2 kLIBC
>>>>>
>>>>> I saw no patches here, but was able to dig them out of the
>>>>> bug-tracking system at http://debbugs.gnu.org/19186.
>>>>> I have applied and pushed the first one.  Thank you.
>>>>>
>>>>> However, for the second, my inclination is that if at all possible,
>>>>> it should be fixed via an lseek replacement that does something
>>>>> more sensible. Of course, that may not be possible, but from
>>>>> what you've presented so far, I cannot tell. Please demonstrate
>>>>> a use of diff that shows how OS/2+kLIBC's lseek fails.
>>>>
>>>> Do you want this ?
>>>>
>>>> -----
>>>> $ cat file | diff - file
>>>> diff.exe: -: Invalid seek
>>>> -----
>>>
>>> Yes.  Thanks. That shows how lseek-pipe fails on your system.
>>> Please adjust your patch to make diff ignore failure only in that case,
>>> i.e., when errno == EINVAL (assuming strerror(EINVAL)
>>> produces that diagnostic).
>>
>> Do you mean to add errno == EINVAL to if() for pfatal_with_name() ?
> 
> No.
> Skip the test only when this lseek fails with precisely that errno value:
> 

Ok. Fixed.

-- 
KO Myung-Hun

Using Mozilla SeaMonkey 2.7.2
Under OS/2 Warp 4 for Korean with FixPak #15
In VirtualBox v4.1.32 on Intel Core i7-3615QM 2.30GHz with 8GB RAM

Korean OS/2 User Community : http://www.ecomstation.co.kr

>From 7b7ebe9c5716a39cff4478e6e83720b9a9648c62 Mon Sep 17 00:00:00 2001
From: KO Myung-Hun <[email-masked]>
Date: Tue, 15 Jul 2014 11:50:53 +0900
Subject: [PATCH] diff: skip test if seek is not possible on OS/2 kLIBC

This fixes the problem that 'diff - file' and 'cat file | diff - file'
fail due to a seek failure with a message 'diff.exe: -: Invalid seek',
because seek does not work on stdin and a pipe on OS/2 kLIBC.

* src/io.c (sip): Set skip_test to true if seek is not possible on
OS/2 kLIBC.
---
 src/io.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/io.c b/src/io.c
index 1a8b936..e564f40 100644
--- a/src/io.c
+++ b/src/io.c
@@ -108,6 +108,13 @@ sip (struct file_data *current, bool skip_test)
 				     PTRDIFF_MAX - 2 * sizeof (word));
       current->buffer = xmalloc (current->bufsize);
 
+#ifdef __KLIBC__
+      /* Skip test if seek is not possible */
+      skip_test = skip_test
+		  || (lseek (current->desc, 0, SEEK_CUR) < 0
+		      && errno == ESPIPE);
+#endif
+
       if (! skip_test)
 	{
 	  /* Check first part of file to see if it's a binary file.  */
-- 
1.8.5.2