mirror of https://github.com/ipxe/ipxe.git
[makefile] Add -Wformat-nonliteral as an extra warning category
-Wformat-nonliteral is not enabled by -Wall and needs to be explicitly specified. Modified the few files that use nonliteral format strings to work with this new setting in place. Inspired by a patch from Carl Karsten <carl@personnelware.com> and an identical patch from Rorschach <r0rschach@lavabit.com>.pull/1/head
parent
ac663cf509
commit
2e812235f4
|
@ -265,7 +265,7 @@ ifdef BIN
|
|||
#
|
||||
CFLAGS += -I include -I arch/$(ARCH)/include -I .
|
||||
CFLAGS += -Os -ffreestanding
|
||||
CFLAGS += -Wall -W
|
||||
CFLAGS += -Wall -W -Wformat-nonliteral
|
||||
CFLAGS += -g
|
||||
CFLAGS += $(EXTRA_CFLAGS)
|
||||
ASFLAGS += $(EXTRA_ASFLAGS)
|
||||
|
|
|
@ -363,7 +363,7 @@ vxgetlink(void)
|
|||
if (n > 0) {
|
||||
printf("/");
|
||||
}
|
||||
printf(conn_tab[k].name);
|
||||
printf("%s", conn_tab[k].name );
|
||||
n++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -452,7 +452,7 @@ static int reg_delay(int offset, u32 mask,
|
|||
delaymax -= delay;
|
||||
if (delaymax < 0) {
|
||||
if (msg)
|
||||
printf(msg);
|
||||
printf("%s", msg);
|
||||
return 1;
|
||||
}
|
||||
} while ((readl(base + offset) & mask) != target);
|
||||
|
|
|
@ -1008,7 +1008,7 @@ rhine_probe1 (struct nic *nic, struct pci_device *pci, int ioaddr, int chip_id,
|
|||
unsigned char mode3_reg;
|
||||
|
||||
if (rhine_debug > 0 && did_version++ == 0)
|
||||
printf (version);
|
||||
printf ("%s",version);
|
||||
|
||||
// get revision id.
|
||||
pci_read_config_byte(pci, PCI_REVISION, &revision_id);
|
||||
|
|
|
@ -149,8 +149,8 @@ extern int xfer_deliver_raw ( struct xfer_interface *xfer,
|
|||
const void *data, size_t len );
|
||||
extern int xfer_vprintf ( struct xfer_interface *xfer,
|
||||
const char *format, va_list args );
|
||||
extern int xfer_printf ( struct xfer_interface *xfer,
|
||||
const char *format, ... );
|
||||
extern int __attribute__ (( format ( printf, 2, 3 ) ))
|
||||
xfer_printf ( struct xfer_interface *xfer, const char *format, ... );
|
||||
extern int xfer_seek ( struct xfer_interface *xfer, off_t offset, int whence );
|
||||
|
||||
extern void ignore_xfer_close ( struct xfer_interface *xfer, int rc );
|
||||
|
|
|
@ -109,23 +109,39 @@ static void ftp_done ( struct ftp_request *ftp, int rc ) {
|
|||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* FTP control channel strings
|
||||
/** An FTP control channel string */
|
||||
struct ftp_control_string {
|
||||
/** Literal portion */
|
||||
const char *literal;
|
||||
/** Variable portion
|
||||
*
|
||||
* These are used as printf() format strings. Since only one of them
|
||||
* (RETR) takes an argument, we always supply that argument to the
|
||||
* snprintf() call.
|
||||
* @v ftp FTP request
|
||||
* @ret string Variable portion of string
|
||||
*/
|
||||
static const char * ftp_strings[] = {
|
||||
[FTP_CONNECT] = NULL,
|
||||
[FTP_USER] = "USER anonymous\r\n",
|
||||
[FTP_PASS] = "PASS etherboot@etherboot.org\r\n",
|
||||
[FTP_TYPE] = "TYPE I\r\n",
|
||||
[FTP_PASV] = "PASV\r\n",
|
||||
[FTP_RETR] = "RETR %s\r\n",
|
||||
[FTP_WAIT] = NULL,
|
||||
[FTP_QUIT] = "QUIT\r\n",
|
||||
[FTP_DONE] = NULL,
|
||||
const char * ( *variable ) ( struct ftp_request *ftp );
|
||||
};
|
||||
|
||||
/**
|
||||
* Retrieve FTP pathname
|
||||
*
|
||||
* @v ftp FTP request
|
||||
* @ret path FTP pathname
|
||||
*/
|
||||
static const char * ftp_uri_path ( struct ftp_request *ftp ) {
|
||||
return ftp->uri->path;
|
||||
}
|
||||
|
||||
/** FTP control channel strings */
|
||||
static struct ftp_control_string ftp_strings[] = {
|
||||
[FTP_CONNECT] = { NULL, NULL },
|
||||
[FTP_USER] = { "USER anonymous", NULL },
|
||||
[FTP_PASS] = { "PASS etherboot@etherboot.org", NULL },
|
||||
[FTP_TYPE] = { "TYPE I", NULL },
|
||||
[FTP_PASV] = { "PASV", NULL },
|
||||
[FTP_RETR] = { "RETR ", ftp_uri_path },
|
||||
[FTP_WAIT] = { NULL, NULL },
|
||||
[FTP_QUIT] = { "QUIT", NULL },
|
||||
[FTP_DONE] = { NULL, NULL },
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -178,17 +194,22 @@ static void ftp_parse_value ( char **text, uint8_t *value, size_t len ) {
|
|||
*
|
||||
*/
|
||||
static void ftp_next_state ( struct ftp_request *ftp ) {
|
||||
struct ftp_control_string *ftp_string;
|
||||
const char *literal;
|
||||
const char *variable;
|
||||
|
||||
/* Move to next state */
|
||||
if ( ftp->state < FTP_DONE )
|
||||
ftp->state++;
|
||||
|
||||
/* Send control string if needed */
|
||||
if ( ftp_strings[ftp->state] != NULL ) {
|
||||
DBGC ( ftp, "FTP %p sending ", ftp );
|
||||
DBGC ( ftp, ftp_strings[ftp->state], ftp->uri->path );
|
||||
xfer_printf ( &ftp->control, ftp_strings[ftp->state],
|
||||
ftp->uri->path );
|
||||
ftp_string = &ftp_strings[ftp->state];
|
||||
literal = ftp_string->literal;
|
||||
variable = ( ftp_string->variable ?
|
||||
ftp_string->variable ( ftp ) : "" );
|
||||
if ( literal ) {
|
||||
DBGC ( ftp, "FTP %p sending %s%s\n", ftp, literal, variable );
|
||||
xfer_printf ( &ftp->control, "%s%s\r\n", literal, variable );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue