mirror of https://github.com/ipxe/ipxe.git
[slam] Eliminate variable-length stack allocation
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/106/head
parent
6248ac396a
commit
c5306bcfa5
|
@ -656,13 +656,18 @@ static struct interface_descriptor slam_xfer_desc =
|
|||
static int slam_parse_multicast_address ( struct slam_request *slam,
|
||||
const char *path,
|
||||
struct sockaddr_in *address ) {
|
||||
char path_dup[ strlen ( path ) /* no +1 */ ];
|
||||
char *path_dup;
|
||||
char *sep;
|
||||
char *end;
|
||||
int rc;
|
||||
|
||||
/* Create temporary copy of path, minus the leading '/' */
|
||||
assert ( *path == '/' );
|
||||
memcpy ( path_dup, ( path + 1 ) , sizeof ( path_dup ) );
|
||||
path_dup = strdup ( path + 1 );
|
||||
if ( ! path_dup ) {
|
||||
rc = -ENOMEM;
|
||||
goto err_strdup;
|
||||
}
|
||||
|
||||
/* Parse port, if present */
|
||||
sep = strchr ( path_dup, ':' );
|
||||
|
@ -672,7 +677,8 @@ static int slam_parse_multicast_address ( struct slam_request *slam,
|
|||
if ( *end != '\0' ) {
|
||||
DBGC ( slam, "SLAM %p invalid multicast port "
|
||||
"\"%s\"\n", slam, sep );
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto err_port;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -680,10 +686,18 @@ static int slam_parse_multicast_address ( struct slam_request *slam,
|
|||
if ( inet_aton ( path_dup, &address->sin_addr ) == 0 ) {
|
||||
DBGC ( slam, "SLAM %p invalid multicast address \"%s\"\n",
|
||||
slam, path_dup );
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto err_addr;
|
||||
}
|
||||
|
||||
return 0;
|
||||
/* Success */
|
||||
rc = 0;
|
||||
|
||||
err_addr:
|
||||
err_port:
|
||||
free ( path_dup );
|
||||
err_strdup:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue