audio: Change strtok in audiohal to strtok_r [1/2]

PD#SWPL-192409

Problem:
1.strtok is an unsafe function that affects
the value of an incoming variable when it
is called multiple times in the same thread.

Solution:
1.Change strtok to strtok_r.
2.The third parameter of strtok_r stores
the remaining contents of the input variable
and is a thread-safe function.

Verify:
yocto

Change-Id: If0fc37dffce780bf7f62542a54dd6b45c981751f
Signed-off-by: hui.liu <hui.liu@amlogic.com>
diff --git a/audio_hal/audio_hw.c b/audio_hal/audio_hw.c
index 92d2cbb..0b38b38 100644
--- a/audio_hal/audio_hw.c
+++ b/audio_hal/audio_hw.c
@@ -4476,8 +4476,9 @@
         char *port_name;
         int port_delay = 0;
         char *delimiter = ",";
-        port_name = strtok(value, delimiter);
-        port_delay = (atoi)(strtok(NULL, delimiter));
+        char *remaining_string = value;
+        port_name = strtok_r(value, delimiter, &remaining_string);
+        port_delay = (atoi)(strtok_r(NULL, delimiter, &remaining_string));
         aml_audio_set_port_delay(port_name, port_delay);
         goto exit;
     }
@@ -4491,7 +4492,7 @@
             double G = 0;
             double Q = 0;
             unsigned int eq_type = 0;
-            char *rest = value;
+            char *remaining_string = value;
             char *token = NULL;
             unsigned int eq_band_id = 0;
             int aed_master_volume = 0;
@@ -4501,13 +4502,13 @@
             set_aed_master_volume_mute(&adev->alsa_mixer, true);
             set_dac_digital_volume_mute(&adev->alsa_mixer, true);
             aml_audio_sleep(32*1000);
-            token = strtok_r(value, ",", &rest);
+            token = strtok_r(value, ",", &remaining_string);
             while (token != NULL) {
                 ret = sscanf(token, "%c:%d:%lf:%lf", &type, &Fc, &G, &Q);
                 if (ret != 4) {
                     break;
                 } else {
-                    token = strtok_r(NULL, ",", &rest);
+                    token = strtok_r(NULL, ",", &remaining_string);
                     if (type == 'P') {
                         eq_type = FILTER_TYPE_BANDPASS;
                     } else {
@@ -4857,7 +4858,8 @@
     ret = str_parms_get_str(parms, "cap_buffer", value, sizeof(value));
     if (ret >= 0) {
         int size = 0;
-        char *name = strtok(value, ",");
+        char * remaining_string = value;
+        char *name = strtok_r(value, ",", &remaining_string);
         AM_LOGI("cap_buffer %s", value);
         if (name) {
             size = atoi(name + strlen(name) + 1);
@@ -5357,7 +5359,8 @@
 #ifdef BUILD_LINUX
     ret = str_parms_get_str(parms, "setenv", value, sizeof(value));
     if (ret >= 0) {
-        char *var = strtok(value, ",");
+        char *remaining_string;
+        char *var = strtok_r(value, ",", &remaining_string);
         if (var) {
             char *val = var + strlen(var) + 1;
             if (strlen(val) > 0) {
diff --git a/utils/alsa_device_parser.c b/utils/alsa_device_parser.c
index 94bb517..cfc0bbb 100644
--- a/utils/alsa_device_parser.c
+++ b/utils/alsa_device_parser.c
@@ -137,10 +137,11 @@
 
 			/* this line contain '[' character */
 			if (strchr(tempbuffer, '[')) {
-				char *Rch = strtok(tempbuffer, "[");
+				char *remaining_string = tempbuffer;
+				char *Rch = strtok_r(tempbuffer, "[", &remaining_string);
 				int id = atoi(Rch);
 				ALOGD("\tcurrent card id = %d, Rch = %s", id, Rch);
-				Rch = strtok(NULL, " ]");
+				Rch = strtok_r(NULL, " ]", &remaining_string);
 				ALOGD("\tcurrent sound card name = %s", Rch);
 				if (strcmp(Rch, name) == 0) {
 					ALOGD("\t sound cardIndex found = %d", id);
@@ -230,10 +231,11 @@
 			if (fgets(tempbuffer, READ_BUFFER_SIZE, mCardFile) != NULL) {
 				/* this line contain '[' character */
 				if (strchr(tempbuffer, '[') && strstr(tempbuffer, CARD_AML_KEYWORD)) {
-					char *Rch = strtok(tempbuffer, "[");
+					char *remaining_string = tempbuffer;
+					char *Rch = strtok_r(tempbuffer, "[", &remaining_string);
 					mCardIndex = atoi(Rch);
 					ALOGD("\tcurrent mCardIndex = %d, Rch = %s", mCardIndex, Rch);
-					Rch = strtok(NULL, " ]");
+					Rch = strtok_r(NULL, " ]", &remaining_string);
 					ALOGD("\tcurrent sound card name = %s", Rch);
 					if (strcmp(Rch, CARD_NAME_AUGE) == 0) {
 						ALOGD("\t auge sound cardIndex found = %d", mCardIndex);
@@ -306,6 +308,7 @@
 	char *Rch;
 	char mStreamName[256];
 	char *PortName = NULL;
+	char *remaining_string = InputBuffer;
 
 	ALOGD("AddPcmString p_info:%p, InputBuffer = %s", p_info, InputBuffer);
 	if (!p_info) {
@@ -313,7 +316,7 @@
 		return;
 	}
 
-	Rch = strtok(InputBuffer, "-");
+	Rch = strtok_r(InputBuffer, "-", &remaining_string);
 	/* parse for stream name */
 	if (Rch != NULL) {
 		struct AudioDeviceDescriptor *mAudioDeviceDescriptor =
@@ -324,9 +327,9 @@
 		}
 
 		mAudioDeviceDescriptor->mCardindex = atoi(Rch);
-		Rch = strtok(NULL, ":");
+		Rch = strtok_r(NULL, ":", &remaining_string);
 		mAudioDeviceDescriptor->mPcmIndex = atoi(Rch);
-		Rch = strtok(NULL, ": ");
+		Rch = strtok_r(NULL, ": ", &remaining_string);
 		if (Rch) {
 			memcpy(mStreamName, Rch, 256);
 			PortName = strstr(mStreamName, "alsaPORT-");
@@ -393,7 +396,7 @@
 				mAudioDeviceDescriptor->mCardindex, mAudioDeviceDescriptor->mPcmIndex, PortName);
 		}
 
-		Rch = strtok(NULL, ": ");
+		Rch = strtok_r(NULL, ": ", &remaining_string);
 	}
 }
 
diff --git a/utils/basic_utils/ProcessCallStack.cpp b/utils/basic_utils/ProcessCallStack.cpp
index 0197bed..15ee784 100644
--- a/utils/basic_utils/ProcessCallStack.cpp
+++ b/utils/basic_utils/ProcessCallStack.cpp
@@ -96,8 +96,11 @@
     }
 
     // Strip ending newline
-    strtok(procName, "\n");
-
+    for (int i = 0; i < strlen(procName); i++) {
+        if (procName[i] == '\n') {
+            procName[i] = '\0';
+        }
+    }
     return String8(procName);
 }