[infiniband] Use generic base16 functions for SRP
authorMichael Brown <mcb30@ipxe.org>
Fri, 28 May 2010 18:04:59 +0000 (19:04 +0100)
committerPiotr Jaroszyński <p.jaroszynski@gmail.com>
Sat, 29 May 2010 14:21:20 +0000 (16:21 +0200)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Piotr Jaroszyński <p.jaroszynski@gmail.com>
src/net/infiniband/ib_srp.c

index c156d3a..8880904 100644 (file)
@@ -32,6 +32,7 @@ FILE_LICENCE ( BSD2 );
 
 #include <stdlib.h>
 #include <errno.h>
+#include <gpxe/base16.h>
 #include <gpxe/srp.h>
 #include <gpxe/infiniband.h>
 #include <gpxe/ib_cmrc.h>
@@ -78,8 +79,7 @@ static int ib_srp_parse_byte_string ( const char *rp_comp, uint8_t *bytes,
                                      unsigned int size_flags ) {
        size_t size = ( size_flags & ~IB_SRP_PARSE_FLAG_MASK );
        size_t rp_comp_len = strlen ( rp_comp );
-       char buf[3];
-       char *buf_end;
+       int decoded_size;
 
        /* Allow optional components to be empty */
        if ( ( rp_comp_len == 0 ) &&
@@ -91,13 +91,11 @@ static int ib_srp_parse_byte_string ( const char *rp_comp, uint8_t *bytes,
                return -EINVAL_BYTE_STRING_LEN;
 
        /* Parse byte string */
-       for ( ; size ; size--, rp_comp += 2, bytes++ ) {
-               memcpy ( buf, rp_comp, 2 );
-               buf[2] = '\0';
-               *bytes = strtoul ( buf, &buf_end, 16 );
-               if ( buf_end != &buf[2] )
-                       return -EINVAL_BYTE_STRING;
-       }
+       decoded_size = base16_decode ( rp_comp, bytes );
+       if ( decoded_size < 0 )
+               return decoded_size;
+       assert ( decoded_size == size );
+
        return 0;
 }