Lines Matching refs:ai
48 static rt_err_t args_append(struct lwp_args_info *ai, const char *str_addr, in args_append() argument
54 if (ai->strings_length + str_len + 1 > ai->str_buf_size) in args_append()
58 newptr = rt_realloc(ai->str_buf, ai->str_buf_size * 2); in args_append()
61 ai->str_buf = newptr; in args_append()
62 ai->str_buf_size *= 2; in args_append()
66 str_bufaddr = &ai->str_buf[ai->strings_length]; in args_append()
70 ai->strings_length += str_len + 1; in args_append()
75 ai->strings_length += str_len; in args_append()
76 ai->str_buf[ai->strings_length++] = '\0'; in args_append()
84 error = _strvec_append(&ai->argv, str_bufaddr); in args_append()
85 if (!error && ai->argv.string_count == 1) in args_append()
87 ai->argv0_strlen = str_len; in args_append()
92 error = _strvec_append(&ai->envp, str_bufaddr); in args_append()
112 static rt_err_t _args_override_argv0(struct lwp_args_info *ai, struct lwp_args_info *ow_ai) in _args_override_argv0() argument
125 new_argc = ai->argv.string_count - 1 + ow_ai->argv.string_count; in _args_override_argv0()
133 ai_bytes_tobe_copied = ai->strings_length - (ai->argv0_strlen + 1); in _args_override_argv0()
153 off = base - (ai->str_buf + ai->argv0_strlen + 1); in _args_override_argv0()
155 memcpy(base, ai->str_buf + ai->argv0_strlen + 1, ai_bytes_tobe_copied); in _args_override_argv0()
156 for (size_t j = 1; j < ai->argv.string_count; i++, j++) in _args_override_argv0()
159 new_argv[i] = (char *)ai->argv.strvec[j] + off; in _args_override_argv0()
163 for (i = 0; i < ai->envp.string_count; i++) in _args_override_argv0()
166 ai->envp.strvec[i] += off; in _args_override_argv0()
170 ai->str_buf = new_strbuf; in _args_override_argv0()
171 ai->strings_length = new_strbuf_size; in _args_override_argv0()
172 ai->str_buf_size = new_strbuf_size; in _args_override_argv0()
173 ai->argv.string_count = new_argc; in _args_override_argv0()
174 ai->argv.strvec = (void *)new_argv; in _args_override_argv0()
175 ai->argv.strvec_buflen = new_argc; in _args_override_argv0()
177 ai->argv0_strlen = ow_ai->argv0_strlen; in _args_override_argv0()
181 const char *lwp_args_get_argv_0(struct lwp_args_info *ai) in lwp_args_get_argv_0() argument
183 return ai->str_buf; in lwp_args_get_argv_0()
186 static rt_err_t args_init(struct lwp_args_info *ai, size_t str_buf_size) in args_init() argument
193 memset(ai, 0, sizeof(*ai)); in args_init()
195 _strvec_init(&ai->argv); in args_init()
196 if (!ai->argv.strvec) in args_init()
201 _strvec_init(&ai->envp); in args_init()
202 if (!ai->envp.strvec) in args_init()
205 _strvec_detach(&ai->argv); in args_init()
209 ai->str_buf_size = str_buf_size; in args_init()
210 ai->str_buf = str_buf; in args_init()
215 rt_err_t lwp_args_init(struct lwp_args_info *ai) in lwp_args_init() argument
217 return args_init(ai, STR_BUF_DEFAULT_SIZE); in lwp_args_init()
220 void lwp_args_detach(struct lwp_args_info *ai) in lwp_args_detach() argument
222 _strvec_detach(&ai->argv); in lwp_args_detach()
223 _strvec_detach(&ai->envp); in lwp_args_detach()
224 rt_free(ai->str_buf); in lwp_args_detach()
228 struct process_aux *lwp_argscopy(struct rt_lwp *lwp, struct lwp_args_info *ai) in lwp_argscopy() argument
239 rt_base_t argc = ai->argv.string_count; in lwp_argscopy()
240 rt_base_t envc = ai->envp.string_count; in lwp_argscopy()
246 + ai->strings_length + sizeof(struct process_aux); in lwp_argscopy()
266 lwp_data_put(lwp, str_ua, ai->str_buf, ai->strings_length); in lwp_argscopy()
269 off = str_ua - ai->str_buf; in lwp_argscopy()
273 ai->argv.strvec[i] += off; in lwp_argscopy()
275 lwp_data_put(lwp, iter, ai->argv.strvec, sizeof(char *) * ai->argv.string_count); in lwp_argscopy()
276 iter += ai->argv.string_count; in lwp_argscopy()
285 ai->envp.strvec[i] += off; in lwp_argscopy()
287 lwp_data_put(lwp, iter, ai->envp.strvec, sizeof(char *) * ai->envp.string_count); in lwp_argscopy()
288 iter += ai->envp.string_count; in lwp_argscopy()
549 rt_err_t lwp_args_load_script(struct lwp_args_info *ai, const char *filename) in lwp_args_load_script() argument
621 error = _args_override_argv0(ai, &ow_ai); in lwp_args_load_script()