Add option -l logfile to redirect diagnostic messages to a logfile rather

than stderr.



git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1179 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
Joerg Wunsch 2013-05-16 09:11:32 +00:00
parent 3756a42db1
commit d0625e8fec
5 changed files with 47 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2013-05-08 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
* main.c (main): Add option -l logfile.
* avrdude.1: Document -l option.
* doc/avrdude.texi: (Dito.)
2013-05-15 Rene Liebscher <R.Liebscher@gmx.de> 2013-05-15 Rene Liebscher <R.Liebscher@gmx.de>
* configure.ac: if both found libftdi and libftdi1 use only libftdi1 * configure.ac: if both found libftdi and libftdi1 use only libftdi1

5
NEWS
View File

@ -129,6 +129,11 @@ Current:
(patch #7699 Read additional config files) (patch #7699 Read additional config files)
* The new option -l logfile allows to redirect diagnostic messages
to a logfile rather than stdout. Useful to record debugging
traces, in particular in environments which do not offer
shell-style redirection functionality for standard streams.
* Programmer types in configuration file are no longer keywords but * Programmer types in configuration file are no longer keywords but
specified as string. specified as string.

View File

@ -1,6 +1,6 @@
.\" .\"
.\" avrdude - A Downloader/Uploader for AVR device programmers .\" avrdude - A Downloader/Uploader for AVR device programmers
.\" Copyright (C) 2001, 2002, 2003, 2005 - 2011 Joerg Wunsch .\" Copyright (C) 2001, 2002, 2003, 2005 - 2013 Joerg Wunsch
.\" .\"
.\" This program is free software; you can redistribute it and/or modify .\" This program 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
@ -18,7 +18,7 @@
.\" .\"
.\" $Id$ .\" $Id$
.\" .\"
.Dd DATE December 3, 2012 .Dd DATE May 16, 2013
.Os .Os
.Dt AVRDUDE 1 .Dt AVRDUDE 1
.Sh NAME .Sh NAME
@ -38,6 +38,7 @@
.Oc .Oc
.Op Fl F .Op Fl F
.Op Fl i Ar delay .Op Fl i Ar delay
.Op Fl n logfile
.Op Fl n .Op Fl n
.Op Fl O .Op Fl O
.Op Fl P Ar port .Op Fl P Ar port
@ -416,6 +417,16 @@ is running.
On Win32 operating systems, a preconfigured number of cycles per On Win32 operating systems, a preconfigured number of cycles per
microsecond is assumed that might be off a bit for very fast or very microsecond is assumed that might be off a bit for very fast or very
slow machines. slow machines.
.It Fl l Ar logfile
Use
.Ar logfile
rather than
.Va stderr
for diagnostics output.
Note that initial diagnostic messages (during option parsing) are still
written to
.Va stderr
anyway.
.It Fl n .It Fl n
No-write - disables actually writing data to the MCU (useful for debugging No-write - disables actually writing data to the MCU (useful for debugging
.Nm avrdude .Nm avrdude

View File

@ -485,6 +485,11 @@ On Win32 operating systems, a preconfigured number of cycles per
microsecond is assumed that might be off a bit for very fast or very microsecond is assumed that might be off a bit for very fast or very
slow machines. slow machines.
@item -l @var{logfile}
Use @var{logfile} rather than @var{stderr} for diagnostics output.
Note that initial diagnostic messages (during option parsing) are still
written to @var{stderr} anyway.
@item -n @item -n
No-write - disables actually writing data to the MCU (useful for No-write - disables actually writing data to the MCU (useful for
debugging AVRDUDE). debugging AVRDUDE).

20
main.c
View File

@ -1,7 +1,7 @@
/* /*
* avrdude - A Downloader/Uploader for AVR device programmers * avrdude - A Downloader/Uploader for AVR device programmers
* Copyright (C) 2000-2005 Brian S. Dean <bsd@bsdhome.com> * Copyright (C) 2000-2005 Brian S. Dean <bsd@bsdhome.com>
* Copyright 2007-2009 Joerg Wunsch <j@uriah.heep.sax.de> * Copyright 2007-2013 Joerg Wunsch <j@uriah.heep.sax.de>
* *
* This program is free software; you can redistribute it and/or modify * This program 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
@ -123,6 +123,7 @@ static void usage(void)
" -Y <number> Initialize erase cycle # in EEPROM.\n" " -Y <number> Initialize erase cycle # in EEPROM.\n"
" -v Verbose output. -v -v for more.\n" " -v Verbose output. -v -v for more.\n"
" -q Quell progress output. -q -q for less.\n" " -q Quell progress output. -q -q for less.\n"
" -l logfile Use logfile rather than stderr for diagnostics.\n"
" -? Display this usage.\n" " -? Display this usage.\n"
"\navrdude version %s, URL: <http://savannah.nongnu.org/projects/avrdude/>\n" "\navrdude version %s, URL: <http://savannah.nongnu.org/projects/avrdude/>\n"
,progname, version); ,progname, version);
@ -332,6 +333,7 @@ int main(int argc, char * argv [])
int silentsafe; /* Don't ask about fuses, 1=silent, 0=normal */ int silentsafe; /* Don't ask about fuses, 1=silent, 0=normal */
int init_ok; /* Device initialization worked well */ int init_ok; /* Device initialization worked well */
int is_open; /* Device open succeeded */ int is_open; /* Device open succeeded */
char * logfile; /* Use logfile rather than stderr for diagnostics */
enum updateflags uflags = UF_AUTO_ERASE; /* Flags for do_op() */ enum updateflags uflags = UF_AUTO_ERASE; /* Flags for do_op() */
unsigned char safemode_lfuse = 0xff; unsigned char safemode_lfuse = 0xff;
unsigned char safemode_hfuse = 0xff; unsigned char safemode_hfuse = 0xff;
@ -411,6 +413,7 @@ int main(int argc, char * argv [])
safemode = 1; /* Safemode on by default */ safemode = 1; /* Safemode on by default */
silentsafe = 0; /* Ask by default */ silentsafe = 0; /* Ask by default */
is_open = 0; is_open = 0;
logfile = NULL;
if (isatty(STDIN_FILENO) == 0) if (isatty(STDIN_FILENO) == 0)
safemode = 0; /* Turn off safemode if this isn't a terminal */ safemode = 0; /* Turn off safemode if this isn't a terminal */
@ -459,7 +462,7 @@ int main(int argc, char * argv [])
/* /*
* process command line arguments * process command line arguments
*/ */
while ((ch = getopt(argc,argv,"?b:B:c:C:DeE:Fi:np:OP:qstU:uvVx:yY:")) != -1) { while ((ch = getopt(argc,argv,"?b:B:c:C:DeE:Fi:l:np:OP:qstU:uvVx:yY:")) != -1) {
switch (ch) { switch (ch) {
case 'b': /* override default programmer baud rate */ case 'b': /* override default programmer baud rate */
@ -519,6 +522,10 @@ int main(int argc, char * argv [])
ovsigck = 1; ovsigck = 1;
break; break;
case 'l':
logfile = optarg;
break;
case 'n': case 'n':
uflags |= UF_NOWRITE; uflags |= UF_NOWRITE;
break; break;
@ -608,6 +615,15 @@ int main(int argc, char * argv [])
} }
if (logfile != NULL) {
FILE *newstderr = freopen(logfile, "w", stderr);
if (newstderr == NULL) {
/* Help! There's no stderr to complain to anymore now. */
printf("Cannot create logfile \"%s\": %s\n",
logfile, strerror(errno));
return 1;
}
}
if (quell_progress == 0) { if (quell_progress == 0) {
if (isatty (STDERR_FILENO)) if (isatty (STDERR_FILENO))