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>
PR libgfortran/48589
......@@ -20,7 +50,6 @@
* intrinsics/system_clock.c: Use weakrefs only when needed and
supported.
>>>>>>> .r172501
2011-04-12 Janne Blomqvist <jb@gcc.gnu.org>
* 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,
values[5] = local_time.tm_min;
values[6] = local_time.tm_sec;
#if HAVE_SNPRINTF
if (__date)
snprintf (date, DATE_LEN + 1, "%04d%02d%02d",
values[0], values[1], values[2]);
......@@ -179,18 +178,6 @@ date_and_time (char *__date, char *__time, char *__zone,
if (__zone)
snprintf (zone, ZONE_LEN + 1, "%+03d%02d",
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
{
......
/* 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.
Contributed by Andy Vaught
F2003 I/O support contributed by Jerry DeLisle
......@@ -1127,16 +1127,17 @@ void
format_error (st_parameter_dt *dtp, const fnode *f, const char *message)
{
int width, i, j, offset;
char *p, buffer[300];
#define BUFLEN 300
char *p, buffer[BUFLEN];
format_data *fmt = dtp->u.p.fmt;
if (f != NULL)
fmt->format_string = f->source;
if (message == unexpected_element)
sprintf (buffer, message, fmt->error_element);
snprintf (buffer, BUFLEN, message, fmt->error_element);
else
sprintf (buffer, "%s\n", message);
snprintf (buffer, BUFLEN, "%s\n", message);
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.
Contributed by Andy Vaught
F2003 I/O support contributed by Jerry DeLisle
......@@ -467,12 +467,8 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags)
break;
opp->file = tmpname;
#ifdef HAVE_SNPRINTF
opp->file_len = snprintf(opp->file, sizeof (tmpname), "fort.%d",
(int) opp->common.unit);
#else
opp->file_len = sprintf(opp->file, "fort.%d", (int) opp->common.unit);
#endif
break;
default:
......@@ -504,26 +500,29 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags)
if (s == NULL)
{
char *path, *msg;
size_t msglen;
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);
switch (errno)
{
case ENOENT:
sprintf (msg, "File '%s' does not exist", path);
snprintf (msg, msglen, "File '%s' does not exist", path);
break;
case EEXIST:
sprintf (msg, "File '%s' already exists", path);
snprintf (msg, msglen, "File '%s' already exists", path);
break;
case EACCES:
sprintf (msg, "Permission denied trying to open file '%s'", path);
snprintf (msg, msglen,
"Permission denied trying to open file '%s'", path);
break;
case EISDIR:
sprintf (msg, "'%s' is a directory", path);
snprintf (msg, msglen, "'%s' is a directory", path);
break;
default:
......
......@@ -1047,13 +1047,15 @@ write_constant_string (st_parameter_dt *dtp, const fnode *f)
static int
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)
return 0;
/* 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));
format_error (dtp, f, buffer);
......
......@@ -1068,7 +1068,8 @@ tempfile (st_parameter_open *opp)
template = get_mem (tempdirlen + 23);
#ifdef HAVE_MKSTEMP
sprintf (template, "%s%sgfortrantmpXXXXXX", tempdir, slash);
snprintf (template, tempdirlen + 23, "%s%sgfortrantmpXXXXXX",
tempdir, slash);
fd = mkstemp (template);
......@@ -1078,7 +1079,8 @@ tempfile (st_parameter_open *opp)
slashlen = strlen (slash);
do
{
sprintf (template, "%s%sgfortrantmpaaaXXXXXX", tempdir, slash);
snprintf (template, tempdirlen + 23, "%s%sgfortrantmpaaaXXXXXX",
tempdir, slash);
if (count > 0)
{
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.
Contributed by Andy Vaught
Namelist output contributed by Paul Thomas
......@@ -1689,6 +1689,7 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset,
char cup;
char * obj_name;
char * ext_name;
size_t ext_name_len;
char rep_buff[NML_DIGITS];
namelist_info * cmp;
namelist_info * retval = obj->next;
......@@ -1797,7 +1798,7 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset,
{
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));
dtp->u.p.no_leading_blank = 1;
}
......@@ -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_var_name_len = base ? strlen (base->var_name) : 0;
ext_name = (char*)get_mem ( base_name_len
+ base_var_name_len
+ strlen (obj->var_name)
+ obj->var_rank * NML_DIGITS
+ 1);
ext_name_len = base_name_len + base_var_name_len
+ strlen (obj->var_name) + obj->var_rank * NML_DIGITS + 1;
ext_name = (char*)get_mem (ext_name_len);
memcpy (ext_name, base_name, base_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,
ext_name[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);
ext_name[tot_len] = ((int) dim_i == obj->var_rank - 1) ? ')' : ',';
tot_len++;
......
......@@ -524,11 +524,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
*(out4++) = expchar;
edigits--;
}
#if HAVE_SNPRINTF
snprintf (buffer, size, "%+0*d", edigits, e);
#else
sprintf (buffer, "%+0*d", edigits, e);
#endif
memcpy4 (out4, buffer, edigits);
}
......@@ -616,11 +612,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
*(out++) = expchar;
edigits--;
}
#if HAVE_SNPRINTF
snprintf (buffer, size, "%+0*d", edigits, e);
#else
sprintf (buffer, "%+0*d", edigits, e);
#endif
memcpy (out, buffer, edigits);
}
......@@ -940,7 +932,7 @@ OUTPUT_FLOAT_FMT_G(16)
/* 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
(MIN_FIELD_WIDTH-5)-N digits after the decimal point, plus another one
before the decimal point.
......@@ -961,8 +953,6 @@ OUTPUT_FLOAT_FMT_G(16)
equal to the precision. The exponent always contains at least two
digits; if the value is zero, the exponent is 00. */
#ifdef HAVE_SNPRINTF
#define DTOA \
snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
"e", ndigits - 1, tmp);
......@@ -971,17 +961,6 @@ snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
"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)
#define DTOAQ \
......
......@@ -119,6 +119,10 @@ extern int __mingw_snprintf (char *, size_t, const char *, ...)
__attribute__ ((format (gnu_printf, 3, 4)));
#undef 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
......
/* 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
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
it under the terms of the GNU General Public License as published by
......@@ -290,11 +290,7 @@ fallback:
st_printf ("\nBacktrace for this error:\n");
arg[0] = (char *) "pstack";
#ifdef HAVE_SNPRINTF
snprintf (buf, sizeof(buf), "%d", (int) getppid ());
#else
sprintf (buf, "%d", (int) getppid ());
#endif
arg[1] = buf;
arg[2] = NULL;
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>
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
it under the terms of the GNU General Public License as published by
......@@ -107,8 +108,9 @@ store_exe_path (const char * argv0)
#endif
/* exe_path will be cwd + "/" + argv[0] + "\0" */
path = malloc (strlen (cwd) + 1 + strlen (argv0) + 1);
sprintf (path, "%s%c%s", cwd, DIR_SEPARATOR, argv0);
size_t pathlen = strlen (cwd) + 1 + strlen (argv0) + 1;
path = malloc (pathlen);
snprintf (path, pathlen, "%s%c%s", cwd, DIR_SEPARATOR, argv0);
exe_path = path;
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