Mark Brown wrote:
I did attach the file. Your list software must have stripped it.
Here it is again:

Makes sense. It looks to me like someone has already tried to deal
with this (or similar) problem before (the if (ret && ret != 256)
conditional) but it obviously doesn't work on Cygwin.

I've committed your patch here:
  http://svn.apache.org/viewvc?view=rev&rev=509359

Thanks
Martin


Index: /home/mbrown/stdcxx/util/aliases.cpp
===================================================================
--- /home/mbrown/stdcxx/util/aliases.cpp        (revision 506161)
+++ /home/mbrown/stdcxx/util/aliases.cpp        (working copy)
@@ -32,9 +32,12 @@
 #  include <sys/types.h>
 #endif   // __linux__
+#include "diagnostic.h"
+
 #include <rw/_defs.h>
#include <cassert> // for assert()
+#include <cerrno>    // for errno
 #include <cstdlib>
 #include <cstdio>
 #include <cstring>   // for memcpy(), strlen()
@@ -588,11 +591,9 @@
const int ret = std::system (cmd); - if (ret && ret != 256) {
-        std::strcpy (slocname, "call to system ");
-        std::perror (std::strcat (slocname, cmd));
-        std::abort ();
-    }
+    if (ret)
+      issue_diag (W_NOTSUP, false, 0, "call to system(\"%s\") failed: %s\n",
+                 cmd, std::strerror (errno));
// open file containing the list of installed locales
     std::FILE *f = std::fopen (fname, "r");

-- Mark


-----Original Message-----
From: [EMAIL PROTECTED]
Sent: Mon, 19 Feb 2007 14:34:30 -0700
To: [email protected]
Subject: Re: [jira] Commented: (STDCXX-333) std::wfilebuf extracts more
than 1 character from a 1 byte file

Mark Brown wrote:
I decided to look into this as an exercise in stdcxx debugging and
managed to figure out how to get around the error and generate the
en_US.UTF-8 locale.
Great! Thanks for the detective work!

The change I made to make it work is in the
attached patch file. Let me know if this is the correct format
for patches or if you prefer something else.
I don't see the patch. Did you forget to attach it? (Sometimes the
attachments end up getting stripped by ezmlm even though they
shouldn't). If it's small, you might want to paste it directly into
your mail. Otherwise you might need to post it somewhere (e.g., on
your web page or in the issue itself).

Incidentally, the original test program for stdcxx-333 runs fine
on Cygwin with the en_US.UTF-8 locale so the error must be unique
to Linux.
Hmm. Very odd.

Martin

-- Mark


-----Original Message-----
From: [EMAIL PROTECTED]
Sent: Mon, 19 Feb 2007 12:51:24 -0800
To: [email protected], [email protected]
Subject: Re: [jira] Commented: (STDCXX-333) std::wfilebuf extracts more
than 1 character from a 1 byte file

-----Original Message-----
From: [EMAIL PROTECTED]
Sent: Mon, 19 Feb 2007 13:35:19 -0700
To: [email protected]
Subject: Re: [jira] Commented: (STDCXX-333) std::wfilebuf extracts
more
than 1 character from a 1 byte file

Mark Brown (JIRA) wrote:
    [
https://issues.apache.org/jira/browse/STDCXX-333?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12474266
]

Mark Brown commented on STDCXX-333:
-----------------------------------

I tried to see if I could reproduce this problem on Cygwin. My
version
of Cygwin doesn't have any locales so I tried to generate the
en_US.UTF-8 locale using the stdcxx localedef program. I got this
error:

nls$ ../bin/localedef -c -f
/home/mbrown/stdcxx/etc/nls/charmaps/UTF-8
-i /home/mbrown/stdcxx/etc/nls/src/en_US en_US.UTF-8
call to system LC_ALL=C /usr/bin/locale -a >/tmp/tdf4.0 2>/dev/null:
No
such file or directory
Hangup
This looks like an unrelated problem. Could you open a new issue for
it?
Sure. Here it is: https://issues.apache.org/jira/browse/STDCXX-340.

Mark

Thanks
Martin

std::wfilebuf extracts more than 1 character from a 1 byte file
---------------------------------------------------------------

                Key: STDCXX-333
                URL:
https://issues.apache.org/jira/browse/STDCXX-333
            Project: C++ Standard Library
         Issue Type: Bug
         Components: 27. Input/Output
   Affects Versions: 4.1.3
        Environment: gcc 3.2.3 on Linux
           Reporter: Mark Brown

I get an an abort when I run the following program on Linux.
#include <cassert>
#include <fstream>
#include <iostream>
int main ()
{
    {
        std::filebuf fb;
        fb.open ("file", std::ios::out);
        fb.sputc ('a');
    }
    std::wfilebuf fb;
    fb.pubimbue (std::locale ("en_US.UTF-8"));
    fb.open ("file", std::ios::in);
    const int c[] = { fb.sbumpc (), fb.sgetc () };
    std::cout << c [0] << ' ' << c [1] << std::endl;
    assert (L'a' == c [0]);
    assert (std::wfilebuf::traits_type::eof () == c [1]);
}
test: test.cpp:21: int main(): Assertion
`std::wfilebuf::traits_type::eof () == c [1]' failed.
Aborted


Reply via email to