mirror of https://github.com/ipxe/ipxe.git
[iscsi] Fix LUN parsing in the iSCSI root-path
parent
6eaefa16a8
commit
2d41dead08
|
@ -1625,25 +1625,28 @@ enum iscsi_root_path_component {
|
||||||
*/
|
*/
|
||||||
static int iscsi_parse_lun ( struct iscsi_session *iscsi,
|
static int iscsi_parse_lun ( struct iscsi_session *iscsi,
|
||||||
const char *lun_string ) {
|
const char *lun_string ) {
|
||||||
char *p = ( char * ) lun_string;
|
|
||||||
union {
|
union {
|
||||||
uint64_t u64;
|
uint64_t u64;
|
||||||
uint16_t u16[4];
|
uint16_t u16[4];
|
||||||
} lun;
|
} lun;
|
||||||
|
char *p;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Empty LUN; assume LUN 0 */
|
memset ( &lun, 0, sizeof ( lun ) );
|
||||||
if ( ! *lun_string )
|
if ( lun_string ) {
|
||||||
return 0;
|
p = ( char * ) lun_string;
|
||||||
|
|
||||||
for ( i = 0 ; i < 4 ; i++ ) {
|
for ( i = 0 ; i < 4 ; i++ ) {
|
||||||
lun.u16[i] = strtoul ( p, &p, 16 );
|
lun.u16[i] = htons ( strtoul ( p, &p, 16 ) );
|
||||||
|
if ( *p == '\0' )
|
||||||
|
break;
|
||||||
if ( *p != '-' )
|
if ( *p != '-' )
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
if ( *p )
|
if ( *p )
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
iscsi->lun = lun.u64;
|
iscsi->lun = lun.u64;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue