diff --git a/src/svf/svf.c b/src/svf/svf.c
index 275bced..49d2dc2 100644
--- a/src/svf/svf.c
+++ b/src/svf/svf.c
@@ -500,7 +500,11 @@ static int svf_read_command_from_file(int fd)
 		case '\r':
 			slash = 0;
 			comment = 0;
-			break;
+			/* Don't save '\r' and '\n' if no data is parsed */
+			if (!cmd_pos)
+			{
+				break;
+			}
 		default:
 			if (!comment)
 			{
@@ -565,25 +569,33 @@ static int svf_read_command_from_file(int fd)
 
 static int svf_parse_cmd_string(char *str, int len, char **argus, int *num_of_argu)
 {
-	int pos = 0, num = 0, space_found = 1;
+	int pos = 0, num = 0, space_found = 1, in_bracket = 0;
 
 	while (pos < len)
 	{
 		switch (str[pos])
 		{
-		case '\n':
-		case '\r':
 		case '!':
 		case '/':
 			LOG_ERROR("fail to parse svf command");
 			return ERROR_FAIL;
 			break;
-		case ' ':
-			space_found = 1;
-			str[pos] = '\0';
+		case '(':
+			in_bracket = 1;
+			goto parse_char;
+			break;
+		case ')':
+			in_bracket = 0;
+			goto parse_char;
 			break;
 		default:
-			if (space_found)
+parse_char:
+			if ((!in_bracket) && isspace(str[pos]))
+			{
+				space_found = 1;
+				str[pos] = '\0';
+			}
+			else if (space_found)
 			{
 				argus[num++] = &str[pos];
 				space_found = 0;
@@ -658,7 +670,7 @@ static int svf_copy_hexstring_to_binary(char *str, uint8_t **bin, int orig_bit_l
 		{
 			ch = str[--str_len];
 
-			if (!isblank(ch))
+			if (!isspace(ch))
 			{
 				if ((ch >= '0') && (ch <= '9'))
 				{
@@ -694,8 +706,8 @@ static int svf_copy_hexstring_to_binary(char *str, uint8_t **bin, int orig_bit_l
 		}
 	}
 
-	// consume optional leading '0' characters
-	while (str_len > 0 && str[str_len - 1] == '0')
+	// consume optional leading '0' or space characters
+	while (str_len > 0 && ((str[str_len - 1] == '0') || isspace(str[str_len - 1])))
 		str_len--;
 
 	// check valid
