dm: add string convert API
As function sscanf is banned, to get value from parameter buffer,strto* is recommended. To reduce the inspection code when using strto*, it's better to use a string convert API. Usage: For virtio-blk, it has parameters: range=<start lba>/<subfile size> sscanf: if (sscanf(cp, "range=%ld/%ld", &sub_file_start_lba, &sub_file_size) == 2) sub_file_assign = 1; string API: if (strsep(&cp, "=") && !dm_strtol(cp, &cp, 10, &sub_file_start_lba) && *cp == '/' && !dm_strtol(cp + 1, &cp, 10, &sub_file_size)) sub_file_assign = 1; Tracked-on: #1496 Signed-off-by: Conghui Chen <conghui.chen@intel.com> Reviewed-by: Shuo Liu <shuo.a.liu@intel.com> Acked-by: Yin Fengwei <fengwei.yin@intel.com>
This commit is contained in:
parent
4620b935de
commit
e1dab512c2
|
@ -56,6 +56,9 @@ LIBS += -luuid
|
||||||
LIBS += -lusb-1.0
|
LIBS += -lusb-1.0
|
||||||
LIBS += -lacrn-mngr
|
LIBS += -lacrn-mngr
|
||||||
|
|
||||||
|
# lib
|
||||||
|
SRCS += lib/dm_string.c
|
||||||
|
|
||||||
# hw
|
# hw
|
||||||
SRCS += hw/block_if.c
|
SRCS += hw/block_if.c
|
||||||
SRCS += hw/usb_core.c
|
SRCS += hw/usb_core.c
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DM_STRING_H_
|
||||||
|
#define _DM_STRING_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Convert string to a long integer.
|
||||||
|
*
|
||||||
|
* @param s Pointer to original string.
|
||||||
|
* @param end Pointer to end string.
|
||||||
|
* @param base Base: 8, 10, 16...
|
||||||
|
* @param val Long integer convert from string.
|
||||||
|
*
|
||||||
|
* @return -1 error.
|
||||||
|
* @return 0 no error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int dm_strtol(char *s, char **end, unsigned int base, long *val);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Convert string to an integer.
|
||||||
|
*
|
||||||
|
* @param s Pointer to original string.
|
||||||
|
* @param end Pointer to end string.
|
||||||
|
* @param base Base: 8, 10, 16...
|
||||||
|
* @param val Integer convert from string.
|
||||||
|
*
|
||||||
|
* @return -1 error.
|
||||||
|
* @return 0 no error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int dm_strtoi(char *s, char **end, unsigned int base, int *val);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Convert string to an unsigned long integer.
|
||||||
|
*
|
||||||
|
* @param s Pointer to original string.
|
||||||
|
* @param end Pointer to end string.
|
||||||
|
* @param base Base: 8, 10, 16...
|
||||||
|
* @param val Unsigned long integer convert from string.
|
||||||
|
*
|
||||||
|
* @return -1 error.
|
||||||
|
* @return 0 no error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int dm_strtoul(char *s, char **end, unsigned int base, unsigned long *val);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Convert string to an unsigned integer.
|
||||||
|
*
|
||||||
|
* @param s Pointer to original string.
|
||||||
|
* @param end Pointer to end string after strtol.
|
||||||
|
* @param base Base: 8, 10, 16...
|
||||||
|
* @param val Unsigned integer convert from string.
|
||||||
|
*
|
||||||
|
* @return -1 error.
|
||||||
|
* @return 0 no error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int dm_strtoui(char *s, char **end, unsigned int base, unsigned int *val);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "dm_string.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
dm_strtol(char *s, char **end, unsigned int base, long *val)
|
||||||
|
{
|
||||||
|
if (!s)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
*val = strtol(s, end, base);
|
||||||
|
if (*end == s) {
|
||||||
|
printf("ERROR! nothing covert for: %s!\n", s);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
dm_strtoi(char *s, char **end, unsigned int base, int *val)
|
||||||
|
{
|
||||||
|
long l_val;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
l_val = 0;
|
||||||
|
ret = dm_strtol(s, end, base, &l_val);
|
||||||
|
*val = (int)l_val;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
dm_strtoul(char *s, char **end, unsigned int base, unsigned long *val)
|
||||||
|
{
|
||||||
|
if (!s)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
*val = strtoul(s, end, base);
|
||||||
|
if (*end == s) {
|
||||||
|
printf("ERROR! nothing covert for: %s!\n", s);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
dm_strtoui(char *s, char **end, unsigned int base, unsigned int *val)
|
||||||
|
{
|
||||||
|
unsigned long l_val;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
l_val = 0;
|
||||||
|
ret = dm_strtoul(s, end, base, &l_val);
|
||||||
|
*val = (unsigned int)l_val;
|
||||||
|
return ret;
|
||||||
|
}
|
Loading…
Reference in New Issue