| OLD | NEW | 
|   1 /* Copyright 2011-2012 Free Software Foundation, Inc. |   1 /* Copyright (C) 2013 Free Software Foundation, Inc. | 
|   2  |   2  | 
|   3    This file is part of GDB. |   3    This file is part of GDB. | 
|   4  |   4  | 
|   5    This program is free software; you can redistribute it and/or modify |   5    This program is free software; you can redistribute it and/or modify | 
|   6    it under the terms of the GNU General Public License as published by |   6    it under the terms of the GNU General Public License as published by | 
|   7    the Free Software Foundation; either version 3 of the License, or |   7    the Free Software Foundation; either version 3 of the License, or | 
|   8    (at your option) any later version. |   8    (at your option) any later version. | 
|   9  |   9  | 
|  10    This program is distributed in the hope that it will be useful, |  10    This program is distributed in the hope that it will be useful, | 
|  11    but WITHOUT ANY WARRANTY; without even the implied warranty of |  11    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  13    GNU General Public License for more details. |  13    GNU General Public License for more details. | 
|  14  |  14  | 
|  15    You should have received a copy of the GNU General Public License |  15    You should have received a copy of the GNU General Public License | 
|  16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ |  16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ | 
|  17  |  17  | 
|  18 #include <pthread.h> |  18 /* RTLD_NEXT requires _GNU_SOURCE.  */ | 
 |  19 #define _GNU_SOURCE 1 | 
 |  20 #include <dlfcn.h> | 
 |  21 #include <unistd.h> | 
 |  22 #include <fcntl.h> | 
|  19 #include <stdlib.h> |  23 #include <stdlib.h> | 
|  20 #include <assert.h> |  | 
|  21  |  24  | 
|  22 pthread_t thread0; |  25 ssize_t | 
|  23 pthread_t thread1; |  26 read (int fd, void *buf, size_t count) | 
 |  27 { | 
 |  28   static ssize_t (*read2) (int fd, void *buf, size_t count) = NULL; | 
|  24  |  29  | 
|  25 static void * |  30   if (read2 == NULL) | 
|  26 start (void *arg) |  31     { | 
|  27 { |  32       unsetenv ("LD_PRELOAD"); | 
|  28   assert (pthread_self () == thread1); |  33       read2 = dlsym (RTLD_NEXT, "read"); | 
 |  34     } | 
|  29  |  35  | 
|  30   abort (); |  36   if (count > 1 && isatty (fd) == 1) | 
 |  37     count = 1; | 
 |  38  | 
 |  39   return read2 (fd, buf, count); | 
|  31 } |  40 } | 
|  32  |  | 
|  33 int |  | 
|  34 main (void) |  | 
|  35 { |  | 
|  36   int i; |  | 
|  37  |  | 
|  38   thread0 = pthread_self (); |  | 
|  39  |  | 
|  40   i = pthread_create (&thread1, NULL, start, NULL); |  | 
|  41   assert (i == 0); |  | 
|  42  |  | 
|  43   i = pthread_join (thread1, NULL); |  | 
|  44   assert (i == 0); |  | 
|  45  |  | 
|  46   return 0; |  | 
|  47 } |  | 
| OLD | NEW |