Commit d30fe1c5 by Janne Blomqvist

Replace sprintf with snprintf

From-SVN: r172590
parent 9c575e20
2011-04-16 Janne Blomqvist <jb@gcc.gnu.org>
* intrinsics/date_and_time.c (date_and_time): Remove sprintf CPP
branch.
* io/format.c (format_error): Use snprintf instead of sprintf.
* io/list_read.c: Move snprintf fallback macro to libgfortran.h.
(convert_integer): Use snprintf instead of sprintf.
(parse_repeat): Likewise.
(read_logical): Likewise.
(read_integer): Likewise.
(read_character): Likewise.
(parse_real): Likewise.
(read_complex): Likewise.
(read_real): Likewise.
(check_type): Likewise.
(nml_parse_qualifier): Add string length argument, use snprintf
instead of sprintf.
(nml_get_obj_data): Use snprintf instead of sprintf.
* io/open.c (new_unit): Remove sprintf CPP branch, use snprintf
instead of sprintf.
* io/transfer.c (require_type): Use snprintf instead of sprintf.
* io/unix.c (tempfile): Likewise.
* io/write.c (nml_write_obj): Likewise.
* io/write_float.def (output_float): Remove sprintf CPP branch,
use snprintf instead of sprintf.
* libgfortran.h: Add fallback snprintf macro from io/list_read.c.
* runtime/backtrace.c (show_backtrace): Remove sprintf CPP branch.
* runtime/main.c (store_exe_path): Use snprintf instead of
sprintf.
2011-04-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> 2011-04-15 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/48589 PR libgfortran/48589
...@@ -20,7 +50,6 @@ ...@@ -20,7 +50,6 @@
* intrinsics/system_clock.c: Use weakrefs only when needed and * intrinsics/system_clock.c: Use weakrefs only when needed and
supported. supported.
>>>>>>> .r172501
2011-04-12 Janne Blomqvist <jb@gcc.gnu.org> 2011-04-12 Janne Blomqvist <jb@gcc.gnu.org>
* configure.ac: Use AC_TYPE_* to make sure we have (u)intptr_t, * configure.ac: Use AC_TYPE_* to make sure we have (u)intptr_t,
......
...@@ -168,7 +168,6 @@ date_and_time (char *__date, char *__time, char *__zone, ...@@ -168,7 +168,6 @@ date_and_time (char *__date, char *__time, char *__zone,
values[5] = local_time.tm_min; values[5] = local_time.tm_min;
values[6] = local_time.tm_sec; values[6] = local_time.tm_sec;
#if HAVE_SNPRINTF
if (__date) if (__date)
snprintf (date, DATE_LEN + 1, "%04d%02d%02d", snprintf (date, DATE_LEN + 1, "%04d%02d%02d",
values[0], values[1], values[2]); values[0], values[1], values[2]);
...@@ -179,18 +178,6 @@ date_and_time (char *__date, char *__time, char *__zone, ...@@ -179,18 +178,6 @@ date_and_time (char *__date, char *__time, char *__zone,
if (__zone) if (__zone)
snprintf (zone, ZONE_LEN + 1, "%+03d%02d", snprintf (zone, ZONE_LEN + 1, "%+03d%02d",
values[3] / 60, abs (values[3] % 60)); values[3] / 60, abs (values[3] % 60));
#else
if (__date)
sprintf (date, "%04d%02d%02d", values[0], values[1], values[2]);
if (__time)
sprintf (timec, "%02d%02d%02d.%03d",
values[4], values[5], values[6], values[7]);
if (__zone)
sprintf (zone, "%+03d%02d",
values[3] / 60, abs (values[3] % 60));
#endif
} }
else else
{ {
......
/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 /* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Andy Vaught Contributed by Andy Vaught
F2003 I/O support contributed by Jerry DeLisle F2003 I/O support contributed by Jerry DeLisle
...@@ -1127,16 +1127,17 @@ void ...@@ -1127,16 +1127,17 @@ void
format_error (st_parameter_dt *dtp, const fnode *f, const char *message) format_error (st_parameter_dt *dtp, const fnode *f, const char *message)
{ {
int width, i, j, offset; int width, i, j, offset;
char *p, buffer[300]; #define BUFLEN 300
char *p, buffer[BUFLEN];
format_data *fmt = dtp->u.p.fmt; format_data *fmt = dtp->u.p.fmt;
if (f != NULL) if (f != NULL)
fmt->format_string = f->source; fmt->format_string = f->source;
if (message == unexpected_element) if (message == unexpected_element)
sprintf (buffer, message, fmt->error_element); snprintf (buffer, BUFLEN, message, fmt->error_element);
else else
sprintf (buffer, "%s\n", message); snprintf (buffer, BUFLEN, "%s\n", message);
j = fmt->format_string - dtp->format; j = fmt->format_string - dtp->format;
......
/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 /* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Andy Vaught Contributed by Andy Vaught
F2003 I/O support contributed by Jerry DeLisle F2003 I/O support contributed by Jerry DeLisle
...@@ -467,12 +467,8 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags) ...@@ -467,12 +467,8 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags)
break; break;
opp->file = tmpname; opp->file = tmpname;
#ifdef HAVE_SNPRINTF
opp->file_len = snprintf(opp->file, sizeof (tmpname), "fort.%d", opp->file_len = snprintf(opp->file, sizeof (tmpname), "fort.%d",
(int) opp->common.unit); (int) opp->common.unit);
#else
opp->file_len = sprintf(opp->file, "fort.%d", (int) opp->common.unit);
#endif
break; break;
default: default:
...@@ -504,26 +500,29 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags) ...@@ -504,26 +500,29 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags)
if (s == NULL) if (s == NULL)
{ {
char *path, *msg; char *path, *msg;
size_t msglen;
path = (char *) gfc_alloca (opp->file_len + 1); path = (char *) gfc_alloca (opp->file_len + 1);
msg = (char *) gfc_alloca (opp->file_len + 51); msglen = opp->file_len + 51;
msg = (char *) gfc_alloca (msglen);
unpack_filename (path, opp->file, opp->file_len); unpack_filename (path, opp->file, opp->file_len);
switch (errno) switch (errno)
{ {
case ENOENT: case ENOENT:
sprintf (msg, "File '%s' does not exist", path); snprintf (msg, msglen, "File '%s' does not exist", path);
break; break;
case EEXIST: case EEXIST:
sprintf (msg, "File '%s' already exists", path); snprintf (msg, msglen, "File '%s' already exists", path);
break; break;
case EACCES: case EACCES:
sprintf (msg, "Permission denied trying to open file '%s'", path); snprintf (msg, msglen,
"Permission denied trying to open file '%s'", path);
break; break;
case EISDIR: case EISDIR:
sprintf (msg, "'%s' is a directory", path); snprintf (msg, msglen, "'%s' is a directory", path);
break; break;
default: default:
......
...@@ -1047,13 +1047,15 @@ write_constant_string (st_parameter_dt *dtp, const fnode *f) ...@@ -1047,13 +1047,15 @@ write_constant_string (st_parameter_dt *dtp, const fnode *f)
static int static int
require_type (st_parameter_dt *dtp, bt expected, bt actual, const fnode *f) require_type (st_parameter_dt *dtp, bt expected, bt actual, const fnode *f)
{ {
char buffer[100]; #define BUFLEN 100
char buffer[BUFLEN];
if (actual == expected) if (actual == expected)
return 0; return 0;
/* Adjust item_count before emitting error message. */ /* Adjust item_count before emitting error message. */
sprintf (buffer, "Expected %s for item %d in formatted transfer, got %s", snprintf (buffer, BUFLEN,
"Expected %s for item %d in formatted transfer, got %s",
type_name (expected), dtp->u.p.item_count - 1, type_name (actual)); type_name (expected), dtp->u.p.item_count - 1, type_name (actual));
format_error (dtp, f, buffer); format_error (dtp, f, buffer);
......
...@@ -1068,7 +1068,8 @@ tempfile (st_parameter_open *opp) ...@@ -1068,7 +1068,8 @@ tempfile (st_parameter_open *opp)
template = get_mem (tempdirlen + 23); template = get_mem (tempdirlen + 23);
#ifdef HAVE_MKSTEMP #ifdef HAVE_MKSTEMP
sprintf (template, "%s%sgfortrantmpXXXXXX", tempdir, slash); snprintf (template, tempdirlen + 23, "%s%sgfortrantmpXXXXXX",
tempdir, slash);
fd = mkstemp (template); fd = mkstemp (template);
...@@ -1078,7 +1079,8 @@ tempfile (st_parameter_open *opp) ...@@ -1078,7 +1079,8 @@ tempfile (st_parameter_open *opp)
slashlen = strlen (slash); slashlen = strlen (slash);
do do
{ {
sprintf (template, "%s%sgfortrantmpaaaXXXXXX", tempdir, slash); snprintf (template, tempdirlen + 23, "%s%sgfortrantmpaaaXXXXXX",
tempdir, slash);
if (count > 0) if (count > 0)
{ {
int c = count; int c = count;
......
/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 /* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Andy Vaught Contributed by Andy Vaught
Namelist output contributed by Paul Thomas Namelist output contributed by Paul Thomas
...@@ -1689,6 +1689,7 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset, ...@@ -1689,6 +1689,7 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset,
char cup; char cup;
char * obj_name; char * obj_name;
char * ext_name; char * ext_name;
size_t ext_name_len;
char rep_buff[NML_DIGITS]; char rep_buff[NML_DIGITS];
namelist_info * cmp; namelist_info * cmp;
namelist_info * retval = obj->next; namelist_info * retval = obj->next;
...@@ -1797,7 +1798,7 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset, ...@@ -1797,7 +1798,7 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset,
{ {
if (rep_ctr > 1) if (rep_ctr > 1)
{ {
sprintf(rep_buff, " %d*", rep_ctr); snprintf(rep_buff, NML_DIGITS, " %d*", rep_ctr);
write_character (dtp, rep_buff, 1, strlen (rep_buff)); write_character (dtp, rep_buff, 1, strlen (rep_buff));
dtp->u.p.no_leading_blank = 1; dtp->u.p.no_leading_blank = 1;
} }
...@@ -1851,11 +1852,9 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset, ...@@ -1851,11 +1852,9 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset,
base_name_len = base_name ? strlen (base_name) : 0; base_name_len = base_name ? strlen (base_name) : 0;
base_var_name_len = base ? strlen (base->var_name) : 0; base_var_name_len = base ? strlen (base->var_name) : 0;
ext_name = (char*)get_mem ( base_name_len ext_name_len = base_name_len + base_var_name_len
+ base_var_name_len + strlen (obj->var_name) + obj->var_rank * NML_DIGITS + 1;
+ strlen (obj->var_name) ext_name = (char*)get_mem (ext_name_len);
+ obj->var_rank * NML_DIGITS
+ 1);
memcpy (ext_name, base_name, base_name_len); memcpy (ext_name, base_name, base_name_len);
clen = strlen (obj->var_name + base_var_name_len); clen = strlen (obj->var_name + base_var_name_len);
...@@ -1872,7 +1871,8 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset, ...@@ -1872,7 +1871,8 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset,
ext_name[tot_len] = '('; ext_name[tot_len] = '(';
tot_len++; tot_len++;
} }
sprintf (ext_name + tot_len, "%d", (int) obj->ls[dim_i].idx); snprintf (ext_name + tot_len, ext_name_len - tot_len, "%d",
(int) obj->ls[dim_i].idx);
tot_len += strlen (ext_name + tot_len); tot_len += strlen (ext_name + tot_len);
ext_name[tot_len] = ((int) dim_i == obj->var_rank - 1) ? ')' : ','; ext_name[tot_len] = ((int) dim_i == obj->var_rank - 1) ? ')' : ',';
tot_len++; tot_len++;
......
...@@ -524,11 +524,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size, ...@@ -524,11 +524,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
*(out4++) = expchar; *(out4++) = expchar;
edigits--; edigits--;
} }
#if HAVE_SNPRINTF
snprintf (buffer, size, "%+0*d", edigits, e); snprintf (buffer, size, "%+0*d", edigits, e);
#else
sprintf (buffer, "%+0*d", edigits, e);
#endif
memcpy4 (out4, buffer, edigits); memcpy4 (out4, buffer, edigits);
} }
...@@ -616,11 +612,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size, ...@@ -616,11 +612,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
*(out++) = expchar; *(out++) = expchar;
edigits--; edigits--;
} }
#if HAVE_SNPRINTF
snprintf (buffer, size, "%+0*d", edigits, e); snprintf (buffer, size, "%+0*d", edigits, e);
#else
sprintf (buffer, "%+0*d", edigits, e);
#endif
memcpy (out, buffer, edigits); memcpy (out, buffer, edigits);
} }
...@@ -940,7 +932,7 @@ OUTPUT_FLOAT_FMT_G(16) ...@@ -940,7 +932,7 @@ OUTPUT_FLOAT_FMT_G(16)
/* Define a macro to build code for write_float. */ /* Define a macro to build code for write_float. */
/* Note: Before output_float is called, sprintf is used to print to buffer the /* Note: Before output_float is called, snprintf is used to print to buffer the
number in the format +D.DDDDe+ddd. For an N digit exponent, this gives us number in the format +D.DDDDe+ddd. For an N digit exponent, this gives us
(MIN_FIELD_WIDTH-5)-N digits after the decimal point, plus another one (MIN_FIELD_WIDTH-5)-N digits after the decimal point, plus another one
before the decimal point. before the decimal point.
...@@ -961,8 +953,6 @@ OUTPUT_FLOAT_FMT_G(16) ...@@ -961,8 +953,6 @@ OUTPUT_FLOAT_FMT_G(16)
equal to the precision. The exponent always contains at least two equal to the precision. The exponent always contains at least two
digits; if the value is zero, the exponent is 00. */ digits; if the value is zero, the exponent is 00. */
#ifdef HAVE_SNPRINTF
#define DTOA \ #define DTOA \
snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \ snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
"e", ndigits - 1, tmp); "e", ndigits - 1, tmp);
...@@ -971,17 +961,6 @@ snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \ ...@@ -971,17 +961,6 @@ snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \ snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
"Le", ndigits - 1, tmp); "Le", ndigits - 1, tmp);
#else
#define DTOA \
sprintf (buffer, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
"e", ndigits - 1, tmp);
#define DTOAL \
sprintf (buffer, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
"Le", ndigits - 1, tmp);
#endif
#if defined(GFC_REAL_16_IS_FLOAT128) #if defined(GFC_REAL_16_IS_FLOAT128)
#define DTOAQ \ #define DTOAQ \
......
...@@ -119,6 +119,10 @@ extern int __mingw_snprintf (char *, size_t, const char *, ...) ...@@ -119,6 +119,10 @@ extern int __mingw_snprintf (char *, size_t, const char *, ...)
__attribute__ ((format (gnu_printf, 3, 4))); __attribute__ ((format (gnu_printf, 3, 4)));
#undef snprintf #undef snprintf
#define snprintf __mingw_snprintf #define snprintf __mingw_snprintf
/* Fallback to sprintf if target does not have snprintf. */
#elif !defined(HAVE_SNPRINTF)
#undef snprintf
#define snprintf(str, size, ...) sprintf (str, __VA_ARGS__)
#endif #endif
......
/* Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. /* Copyright (C) 2006, 2007, 2009, 2011 Free Software Foundation, Inc.
Contributed by François-Xavier Coudert Contributed by François-Xavier Coudert
This file is part of the GNU Fortran 95 runtime library (libgfortran). This file is part of the GNU Fortran runtime library (libgfortran).
Libgfortran is free software; you can redistribute it and/or modify Libgfortran is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -290,11 +290,7 @@ fallback: ...@@ -290,11 +290,7 @@ fallback:
st_printf ("\nBacktrace for this error:\n"); st_printf ("\nBacktrace for this error:\n");
arg[0] = (char *) "pstack"; arg[0] = (char *) "pstack";
#ifdef HAVE_SNPRINTF
snprintf (buf, sizeof(buf), "%d", (int) getppid ()); snprintf (buf, sizeof(buf), "%d", (int) getppid ());
#else
sprintf (buf, "%d", (int) getppid ());
#endif
arg[1] = buf; arg[1] = buf;
arg[2] = NULL; arg[2] = NULL;
execvp (arg[0], arg); execvp (arg[0], arg);
......
/* Copyright (C) 2002-2003, 2005, 2007, 2009 Free Software Foundation, Inc. /* Copyright (C) 2002-2003, 2005, 2007, 2009, 2011
Free Software Foundation, Inc.
Contributed by Andy Vaught and Paul Brook <paul@nowt.org> Contributed by Andy Vaught and Paul Brook <paul@nowt.org>
This file is part of the GNU Fortran 95 runtime library (libgfortran). This file is part of the GNU Fortran runtime library (libgfortran).
Libgfortran is free software; you can redistribute it and/or modify Libgfortran is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -107,8 +108,9 @@ store_exe_path (const char * argv0) ...@@ -107,8 +108,9 @@ store_exe_path (const char * argv0)
#endif #endif
/* exe_path will be cwd + "/" + argv[0] + "\0" */ /* exe_path will be cwd + "/" + argv[0] + "\0" */
path = malloc (strlen (cwd) + 1 + strlen (argv0) + 1); size_t pathlen = strlen (cwd) + 1 + strlen (argv0) + 1;
sprintf (path, "%s%c%s", cwd, DIR_SEPARATOR, argv0); path = malloc (pathlen);
snprintf (path, pathlen, "%s%c%s", cwd, DIR_SEPARATOR, argv0);
exe_path = path; exe_path = path;
please_free_exe_path_when_done = 1; please_free_exe_path_when_done = 1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment