aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-support/fastrpc/fastrpc/0001-apps_std_fopen_with_env-account-for-domain-kinds-whe.patch
blob: 1206c6e8075dc66e0d5defdb69ae3d152330e95c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
From 771c3bc695a18b3bdedea6fac44b3e71708cc540 Mon Sep 17 00:00:00 2001
From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date: Sat, 6 Mar 2021 04:25:01 +0300
Subject: [PATCH] apps_std_fopen_with_env: account for domain kinds when
 looking for data

Currenty apps_std_fopen_with_env() will care about domain only in the
fallback path when looking into /dsp/ dir (/dsp/adsp, /dsp/cdsp, etc).
Account for different domains when looking for the file in the path (so
that e.g. cDSP files will be looked up in the /usr/lib/rfsa/cdsp
directory rather than the default /usr/lib/rfsa/adsp).

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Change-Id: I1dac61d36edc9e8ff1fdc2d56f968d2578f10399
---
 src/apps_std_imp.c | 60 ++++++++++++++++++++++------------------------
 1 file changed, 28 insertions(+), 32 deletions(-)

diff --git a/src/apps_std_imp.c b/src/apps_std_imp.c
index d2559c60d2d6..701d799f5608 100644
--- a/src/apps_std_imp.c
+++ b/src/apps_std_imp.c
@@ -662,6 +662,7 @@ __QAIC_IMPL_EXPORT int __QAIC_IMPL(apps_std_fopen_with_env)(const char* envvarna
    char     *absName    =  NULL;
    uint16   absNameLen  =  0;
    int domain;
+   const char *dspName = NULL;
 
    VERIFYC(NULL != mode, AEE_EINVALIDMODE);
    VERIFYC(NULL != delim, AEE_EINVALIDFORMAT);
@@ -670,8 +671,23 @@ __QAIC_IMPL_EXPORT int __QAIC_IMPL(apps_std_fopen_with_env)(const char* envvarna
    VERIFY(0 == (nErr = get_dirlist_from_env(envvarname, &dirListBuf )));
    VERIFYC(NULL != (dirList = dirListBuf), AEE_EMEMPTR);
 
+   domain = get_domain_id() & DOMAIN_ID_MASK;
+
+   if (domain == ADSP_DOMAIN_ID){
+       dspName = "adsp";
+   } else if (domain == MDSP_DOMAIN_ID){
+       dspName = "mdsp";
+   } else if (domain == SDSP_DOMAIN_ID){
+       dspName = "sdsp";
+   } else if (domain == CDSP_DOMAIN_ID) {
+       dspName = "cdsp";
+   } else {
+       dspName = "adsp";
+   }
+
    while(dirList)
    {
+      int dirNameLen;
       pos = strstr(dirList, delim);
       dirName = dirList;
       if (pos) {
@@ -682,10 +698,13 @@ __QAIC_IMPL_EXPORT int __QAIC_IMPL(apps_std_fopen_with_env)(const char* envvarna
       }
 
       // Account for slash char
-      absNameLen = std_strlen(dirName) + std_strlen(name) + 2;
+      dirNameLen = std_strlen(dirName);
+      absNameLen = dirNameLen + std_strlen(name) + 2;
       VERIFYC(NULL != (absName = (char*)malloc(sizeof(char) * absNameLen)), AEE_ENOMEMORY);
       if ('\0' != *dirName) {
          std_strlcpy(absName, dirName, absNameLen);
+         if (!std_strcmp(absName + dirNameLen - 4, "adsp"))
+            std_memscpy(absName + dirNameLen - 4, 4, dspName, 4);
          std_strlcat(absName, "/", absNameLen);
          std_strlcat(absName, name, absNameLen);
       } else {
@@ -699,47 +718,24 @@ __QAIC_IMPL_EXPORT int __QAIC_IMPL(apps_std_fopen_with_env)(const char* envvarna
          goto bail;
       }
    }
-   domain = get_domain_id() & DOMAIN_ID_MASK;
 
 #ifdef ANDROID_P
    absNameLen = std_strlen("/vendor/dsp/adsp/") + std_strlen(name) + 1;
    VERIFYC(NULL != (absName = (char*)malloc(sizeof(char) * absNameLen)), AEE_ENOMEMORY);
 
-   if (domain == ADSP_DOMAIN_ID){
-       std_strlcpy(absName, "/vendor/dsp/adsp/", absNameLen);
-       std_strlcat(absName, name,absNameLen);
-   } else if (domain == MDSP_DOMAIN_ID){
-       std_strlcpy(absName, "/vendor/dsp/mdsp/", absNameLen);
-       std_strlcat(absName, name,absNameLen);
-   } else if (domain == SDSP_DOMAIN_ID){
-       std_strlcpy(absName, "/vendor/dsp/sdsp/", absNameLen);
-       std_strlcat(absName, name,absNameLen);
-   } else if (domain == CDSP_DOMAIN_ID) {
-       std_strlcpy(absName, "/vendor/dsp/cdsp/", absNameLen);
-       std_strlcat(absName, name,absNameLen);
-   } else {
-       absName[0] = '\0';
-   }
+   std_strlcpy(absName, "/vendor/dsp/", absNameLen);
+   std_strlcat(absName, dspName, absNameLen);
+   std_strlcat(absName, "/", absNameLen);
+   std_strlcat(absName, name,absNameLen);
    nErr = apps_std_fopen(absName, mode, psout);
 #else
    absNameLen = std_strlen("/dsp/adsp/") + std_strlen(name) + 1;
    VERIFYC(NULL != (absName = (char*)malloc(sizeof(char) * absNameLen)), AEE_ENOMEMORY);
 
-   if (domain == ADSP_DOMAIN_ID){
-       std_strlcpy(absName, "/dsp/adsp/", absNameLen);
-       std_strlcat(absName, name,absNameLen);
-   } else if (domain == MDSP_DOMAIN_ID){
-       std_strlcpy(absName, "/dsp/mdsp/", absNameLen);
-       std_strlcat(absName, name,absNameLen);
-   } else if (domain == SDSP_DOMAIN_ID){
-       std_strlcpy(absName, "/dsp/sdsp/", absNameLen);
-       std_strlcat(absName, name,absNameLen);
-   } else if (domain == CDSP_DOMAIN_ID) {
-       std_strlcpy(absName, "/dsp/cdsp/", absNameLen);
-       std_strlcat(absName, name,absNameLen);
-   } else {
-       absName[0] = '\0';
-   }
+   std_strlcpy(absName, "/dsp/", absNameLen);
+   std_strlcat(absName, dspName, absNameLen);
+   std_strlcat(absName, "/", absNameLen);
+   std_strlcat(absName, name,absNameLen);
    nErr = apps_std_fopen(absName, mode, psout);
 #endif
 bail:
-- 
2.30.0