When failure occurs, random_seed may not be 0, so need reset it to 0
manually, or will let the next call init_random_seed() incorrect.  The
related warning:

  g++ -c  -DTARGET_NAME=\"parisc-gchen-linux\" -g -O2 -DIN_GCC  
-DCROSS_DIRECTORY_STRUCTURE  -fno-exceptions -fno-rtti 
-fasynchronous-unwind-tables -W -Wall -Wwrite-strings -Wcast-qual 
-Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long 
-Wno-variadic-macros -Wno-overlength-strings -fno-common  -DHAVE_CONFIG_H -I. 
-I. -I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/../include 
-I../../gcc/gcc/../libcpp/include  -I../../gcc/gcc/../libdecnumber 
-I../../gcc/gcc/../libdecnumber/dpd -I../libdecnumber 
-I../../gcc/gcc/../libbacktrace   -o toplev.o -MT toplev.o -MMD -MP -MF 
./.deps/toplev.TPo ../../gcc/gcc/toplev.c
  ../../gcc/gcc/toplev.c: In function 'void init_local_tick()':
  ../../gcc/gcc/toplev.c:276:56: warning: ignoring return value of 'ssize_t 
read(int, void*, size_t)', declared with attribute warn_unused_result 
[-Wunused-result]

It passes testsuite under x86_64-apple-darwin14.0.0

/gcc
2014-12-27  Chen Gang  <gang.chen.5...@gmail.com>

        * toplev.c (init_local_tick): Process the failure when read
        fails for random_seed.
---
 gcc/toplev.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/toplev.c b/gcc/toplev.c
index 7e06247..e5262be 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -273,7 +273,9 @@ init_local_tick (void)
       int fd = open ("/dev/urandom", O_RDONLY);
       if (fd >= 0)
         {
-          read (fd, &random_seed, sizeof (random_seed));
+          if (read (fd, &random_seed, sizeof (random_seed))
+              != sizeof (random_seed))
+            random_seed = 0;
           close (fd);
         }
 
-- 
1.9.3 (Apple Git-50)
From 05faeede37f6e383f69a1398d355ea8ce3687583 Mon Sep 17 00:00:00 2001
From: Chen Gang <gang.c...@sunrus.com.cn>
Date: Sat, 27 Dec 2014 15:55:57 +0800
Subject: [PATCH] toplev.c: Process the failure when read fails for random_seed

When failure occurs, random_seed may not be 0, so need reset it to 0
manually, or will let the next call init_random_seed() incorrect.  The
related warning:

  g++ -c  -DTARGET_NAME=\"parisc-gchen-linux\" -g -O2 -DIN_GCC  
-DCROSS_DIRECTORY_STRUCTURE  -fno-exceptions -fno-rtti 
-fasynchronous-unwind-tables -W -Wall -Wwrite-strings -Wcast-qual 
-Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long 
-Wno-variadic-macros -Wno-overlength-strings -fno-common  -DHAVE_CONFIG_H -I. 
-I. -I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/../include 
-I../../gcc/gcc/../libcpp/include  -I../../gcc/gcc/../libdecnumber 
-I../../gcc/gcc/../libdecnumber/dpd -I../libdecnumber 
-I../../gcc/gcc/../libbacktrace   -o toplev.o -MT toplev.o -MMD -MP -MF 
./.deps/toplev.TPo ../../gcc/gcc/toplev.c
  ../../gcc/gcc/toplev.c: In function 'void init_local_tick()':
  ../../gcc/gcc/toplev.c:276:56: warning: ignoring return value of 'ssize_t 
read(int, void*, size_t)', declared with attribute warn_unused_result 
[-Wunused-result]

It passes testsuite under x86_64-apple-darwin14.0.0

/gcc
2014-12-27  Chen Gang  <gang.chen.5...@gmail.com>

        * toplev.c (init_local_tick): Process the failure when read
        fails for random_seed.
---
 gcc/toplev.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/toplev.c b/gcc/toplev.c
index 7e06247..e5262be 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -273,7 +273,9 @@ init_local_tick (void)
       int fd = open ("/dev/urandom", O_RDONLY);
       if (fd >= 0)
         {
-          read (fd, &random_seed, sizeof (random_seed));
+          if (read (fd, &random_seed, sizeof (random_seed))
+              != sizeof (random_seed))
+            random_seed = 0;
           close (fd);
         }
 
-- 
1.9.3 (Apple Git-50)

Reply via email to