diff options
author | Janne Blomqvist <jb@gcc.gnu.org> | 2011-01-27 22:05:45 +0200 |
---|---|---|
committer | Janne Blomqvist <jb@gcc.gnu.org> | 2011-01-27 22:05:45 +0200 |
commit | 6a0f6e7799c988524d32767047ca64d05a93adaf (patch) | |
tree | 5391b3d170af8323dd4003f8bd688be43384821f /libgfortran/io/intrinsics.c | |
parent | 5f02b9dbcd0669d7c13999a89694520113c2cc12 (diff) | |
download | gcc-6a0f6e7799c988524d32767047ca64d05a93adaf.tar.gz |
PR 47432 Use ttyname_r() if available
From-SVN: r169337
Diffstat (limited to 'libgfortran/io/intrinsics.c')
-rw-r--r-- | libgfortran/io/intrinsics.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/libgfortran/io/intrinsics.c b/libgfortran/io/intrinsics.c index f2f532b9291..f48bd777456 100644 --- a/libgfortran/io/intrinsics.c +++ b/libgfortran/io/intrinsics.c @@ -1,6 +1,7 @@ /* Implementation of the FGET, FGETC, FPUT, FPUTC, FLUSH FTELL, TTYNAM and ISATTY intrinsics. - Copyright (C) 2005, 2007, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 2005, 2007, 2009, 2010, 2011 Free Software + Foundation, Inc. This file is part of the GNU Fortran runtime library (libgfortran). @@ -351,22 +352,23 @@ void ttynam_sub (int *unit, char * name, gfc_charlen_type name_len) { gfc_unit *u; - char * n; - int i; + int nlen; + int err = 1; - memset (name, ' ', name_len); u = find_unit (*unit); if (u != NULL) { - n = stream_ttyname (u->s); - if (n != NULL) + err = stream_ttyname (u->s, name, name_len); + if (err == 0) { - i = 0; - while (*n && i < name_len) - name[i++] = *(n++); + nlen = strlen (name); + memset (&name[nlen], ' ', name_len - nlen); } + unlock_unit (u); } + if (err != 0) + memset (name, ' ', name_len); } @@ -381,14 +383,15 @@ ttynam (char ** name, gfc_charlen_type * name_len, int unit) u = find_unit (unit); if (u != NULL) { - *name = stream_ttyname (u->s); - if (*name != NULL) + *name = get_mem (TTY_NAME_MAX); + int err = stream_ttyname (u->s, *name, TTY_NAME_MAX); + if (err == 0) { *name_len = strlen (*name); - *name = strdup (*name); unlock_unit (u); return; } + free (*name); unlock_unit (u); } |