From: nvachhar Date: Fri, 2 Oct 2009 20:21:43 +0000 (+0000) Subject: 2009-10-02 Neil Vachharajani X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=35ab2622cf40d5762b0fb450ef0bc2daeaf1a58e;ds=inline 2009-10-02 Neil Vachharajani * gcov-io.c (gcov_open): Open files read-only when MODE < 0 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@152419 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f955aea2a0..c13fe4fa87b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2009-10-02 Neil Vachharajani + + * gcov-io.c (gcov_open): Open files read-only when MODE < 0 + 2009-10-02 Uros Bizjak * config/i386/i386.md (divmod4) Macroize expander from diff --git a/gcc/gcov-io.c b/gcc/gcov-io.c index 98a9287debd..d736cf853d4 100644 --- a/gcc/gcov-io.c +++ b/gcc/gcov-io.c @@ -46,11 +46,13 @@ static inline gcov_unsigned_t from_file (gcov_unsigned_t value) /* Open a gcov file. NAME is the name of the file to open and MODE indicates whether a new file should be created, or an existing file - opened for modification. If MODE is >= 0 an existing file will be - opened, if possible, and if MODE is <= 0, a new file will be - created. Use MODE=0 to attempt to reopen an existing file and then - fall back on creating a new one. Return zero on failure, >0 on - opening an existing file and <0 on creating a new one. */ + opened. If MODE is >= 0 an existing file will be opened, if + possible, and if MODE is <= 0, a new file will be created. Use + MODE=0 to attempt to reopen an existing file and then fall back on + creating a new one. If MODE < 0, the file will be opened in + read-only mode. Otherwise it will be opened for modification. + Return zero on failure, >0 on opening an existing file and <0 on + creating a new one. */ GCOV_LINKAGE int #if IN_LIBGCOV @@ -66,7 +68,6 @@ gcov_open (const char *name, int mode) struct flock s_flock; int fd; - s_flock.l_type = F_WRLCK; s_flock.l_whence = SEEK_SET; s_flock.l_start = 0; s_flock.l_len = 0; /* Until EOF. */ @@ -83,16 +84,25 @@ gcov_open (const char *name, int mode) #endif #if GCOV_LOCKED if (mode > 0) - fd = open (name, O_RDWR); + { + /* Read-only mode - acquire a read-lock. */ + s_flock.l_type = F_RDLCK; + fd = open (name, O_RDONLY); + } else - fd = open (name, O_RDWR | O_CREAT, 0666); + { + /* Write mode - acquire a write-lock. */ + s_flock.l_type = F_WRLCK; + fd = open (name, O_RDWR | O_CREAT, 0666); + } if (fd < 0) return 0; while (fcntl (fd, F_SETLKW, &s_flock) && errno == EINTR) continue; - gcov_var.file = fdopen (fd, "r+b"); + gcov_var.file = fdopen (fd, (mode > 0) ? "rb" : "r+b"); + if (!gcov_var.file) { close (fd); @@ -120,7 +130,8 @@ gcov_open (const char *name, int mode) gcov_var.mode = mode * 2 + 1; #else if (mode >= 0) - gcov_var.file = fopen (name, "r+b"); + gcov_var.file = fopen (name, (mode > 0) ? "rb" : "r+b"); + if (gcov_var.file) gcov_var.mode = 1; else if (mode <= 0)