1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "script_basicinstruction.h"
16 #include <unistd.h>
17 #include "script_utils.h"
18 #include "utils.h"
19
20 using namespace Uscript;
21 using namespace std;
22
23 namespace BasicInstruction {
Execute(Uscript::UScriptEnv & env,Uscript::UScriptContext & context)24 int32_t UScriptInstructionAbort::Execute(Uscript::UScriptEnv &env, Uscript::UScriptContext &context)
25 {
26 int32_t result = 1;
27 int32_t ret = context.GetParam(0, result);
28 if (ret != USCRIPT_SUCCESS) {
29 USCRIPT_LOGE("Failed to get param");
30 return ret;
31 }
32 return ((result == 0) ? USCRIPT_ABOART : USCRIPT_SUCCESS);
33 }
34
Execute(Uscript::UScriptEnv & env,Uscript::UScriptContext & context)35 int32_t UScriptInstructionAssert::Execute(Uscript::UScriptEnv &env, Uscript::UScriptContext &context)
36 {
37 int32_t result = 1;
38 int32_t ret = context.GetParam(0, result);
39 if (ret != USCRIPT_SUCCESS) {
40 USCRIPT_LOGE("Failed to get param");
41 return ret;
42 }
43 return ((result == 0) ? USCRIPT_ASSERT : USCRIPT_SUCCESS);
44 }
45
Execute(Uscript::UScriptEnv & env,Uscript::UScriptContext & context)46 int32_t UScriptInstructionSleep::Execute(Uscript::UScriptEnv &env, Uscript::UScriptContext &context)
47 {
48 int32_t seconds = 1;
49 int32_t ret = context.GetParam(0, seconds);
50 if (ret != USCRIPT_SUCCESS) {
51 USCRIPT_LOGE("Failed to get param");
52 return ret;
53 }
54 sleep(seconds);
55 return USCRIPT_SUCCESS;
56 }
57
Execute(Uscript::UScriptEnv & env,Uscript::UScriptContext & context)58 int32_t UScriptInstructionConcat::Execute(Uscript::UScriptEnv &env, Uscript::UScriptContext &context)
59 {
60 int32_t ret = 0;
61 std::string str;
62 ret = context.GetParam(0, str);
63 if (ret != USCRIPT_SUCCESS) {
64 USCRIPT_LOGE("Failed to get param");
65 return ret;
66 }
67
68 for (int32_t i = 1; i < context.GetParamCount(); i++) {
69 switch (context.GetParamType(i)) {
70 case UScriptContext::PARAM_TYPE_INTEGER: {
71 int32_t v;
72 ret = context.GetParam(i, v);
73 if (ret != USCRIPT_SUCCESS) {
74 USCRIPT_LOGE("Failed to get param");
75 return ret;
76 }
77 str.append(to_string(v));
78 break;
79 }
80 case UScriptContext::PARAM_TYPE_FLOAT: {
81 float v;
82 ret = context.GetParam(i, v);
83 if (ret != USCRIPT_SUCCESS) {
84 USCRIPT_LOGE("Failed to get param");
85 return ret;
86 }
87 str.append(to_string(v));
88 break;
89 }
90 case UScriptContext::PARAM_TYPE_STRING: {
91 std::string v;
92 ret = context.GetParam(i, v);
93 if (ret != USCRIPT_SUCCESS) {
94 USCRIPT_LOGE("Failed to get param");
95 return ret;
96 }
97 str.append(v);
98 break;
99 }
100 default:
101 break;
102 }
103 }
104 context.PushParam(str);
105 return USCRIPT_SUCCESS;
106 }
107
Execute(Uscript::UScriptEnv & env,Uscript::UScriptContext & context)108 int32_t UScriptInstructionIsSubString::Execute(Uscript::UScriptEnv &env, Uscript::UScriptContext &context)
109 {
110 std::string str;
111 std::string subStr;
112 int32_t ret = context.GetParam(0, str);
113 if (ret != USCRIPT_SUCCESS) {
114 USCRIPT_LOGE("Failed to get param");
115 return ret;
116 }
117 ret = context.GetParam(1, subStr);
118 if (ret != USCRIPT_SUCCESS) {
119 USCRIPT_LOGE("Failed to get param");
120 return ret;
121 }
122 string::size_type last = str.find(subStr);
123 if (last == string::npos) {
124 context.PushParam(0);
125 } else {
126 context.PushParam(1);
127 }
128 return USCRIPT_SUCCESS;
129 }
130
Execute(Uscript::UScriptEnv & env,Uscript::UScriptContext & context)131 int32_t UScriptInstructionStdout::Execute(Uscript::UScriptEnv &env, Uscript::UScriptContext &context)
132 {
133 int32_t ret;
134 for (int32_t i = 0; i < context.GetParamCount(); i++) {
135 if (context.GetParamType(i) == UScriptContext::PARAM_TYPE_INTEGER) {
136 int32_t v;
137 ret = context.GetParam(i, v);
138 if (ret != USCRIPT_SUCCESS) {
139 USCRIPT_LOGE("Failed to get param");
140 return ret;
141 }
142 std::cout << v << " ";
143 } else if (context.GetParamType(i) == UScriptContext::PARAM_TYPE_FLOAT) {
144 float v;
145 ret = context.GetParam(i, v);
146 if (ret != USCRIPT_SUCCESS) {
147 USCRIPT_LOGE("Failed to get param");
148 return ret;
149 }
150 std::cout << v << " ";
151 } else if (context.GetParamType(i) == UScriptContext::PARAM_TYPE_STRING) {
152 std::string v;
153 ret = context.GetParam(i, v);
154 if (ret != USCRIPT_SUCCESS) {
155 USCRIPT_LOGE("Failed to get param");
156 return ret;
157 }
158 std::cout << v << " ";
159 }
160 }
161 std::cout << std::endl;
162 return USCRIPT_SUCCESS;
163 }
164
Execute(Uscript::UScriptEnv & env,Uscript::UScriptContext & context)165 int32_t UScriptInstructionDeleteFile::Execute(Uscript::UScriptEnv &env, Uscript::UScriptContext &context)
166 {
167 std::string file;
168 int32_t ret;
169 for (int32_t i = 0; i < context.GetParamCount(); i++) {
170 ret = context.GetParam(i, file);
171 if (ret != USCRIPT_SUCCESS) {
172 USCRIPT_LOGE("Failed to get param");
173 return ret;
174 }
175 USCRIPT_LOGI("delete file %s", file.c_str());
176 ret = Updater::Utils::DeleteFile(file.c_str());
177 if (ret != USCRIPT_SUCCESS) {
178 USCRIPT_LOGE("Failed to delete file");
179 return ret;
180 }
181 }
182 return USCRIPT_SUCCESS;
183 }
184
Execute(Uscript::UScriptEnv & env,Uscript::UScriptContext & context)185 int32_t UScriptInstructionDeleteDir::Execute(Uscript::UScriptEnv &env, Uscript::UScriptContext &context)
186 {
187 std::string path;
188 int32_t ret;
189 for (int32_t i = 0; i < context.GetParamCount(); i++) {
190 ret = context.GetParam(i, path);
191 if (ret != USCRIPT_SUCCESS) {
192 USCRIPT_LOGE("Failed to get param");
193 return ret;
194 }
195 USCRIPT_LOGI("delete dir %s", path.c_str());
196 ret = Updater::Utils::RemoveDir(path.c_str());
197 if (ret != USCRIPT_SUCCESS) {
198 USCRIPT_LOGE("Failed to remove dir");
199 return ret;
200 }
201 }
202 return USCRIPT_SUCCESS;
203 }
204 } // namespace BasicInstruction
205