94 if (!response_out || response_size < 2) {
98 const char *env_value = SAFE_GETENV(
"ASCII_CHAT_QUESTION_PROMPT_RESPONSE");
99 if (!env_value || env_value[0] ==
'\0') {
104 if (env_value[0] ==
';') {
105 log_warn(
"Invalid ASCII_CHAT_QUESTION_PROMPT_RESPONSE format: leading semicolon");
110 const char *semicolon = find_unescaped_semicolon(env_value);
112 if (semicolon == NULL) {
114 size_t len = strlen(env_value);
120 if (len >= response_size) {
121 log_warn(
"Response too long: %zu bytes (max: %zu)", len, response_size - 1);
126 SAFE_STRNCPY(response_out, env_value, response_size);
129 unescape_response(response_out);
133 _putenv(
"ASCII_CHAT_QUESTION_PROMPT_RESPONSE=");
135 unsetenv(
"ASCII_CHAT_QUESTION_PROMPT_RESPONSE");
138 log_dev(
"Popped last response from stack: '%s' (cleared env)", response_out);
143 size_t response_len = (size_t)(semicolon - env_value);
146 if (response_len == 0) {
147 log_warn(
"Invalid ASCII_CHAT_QUESTION_PROMPT_RESPONSE format: empty segment");
151 if (response_len >= response_size) {
152 log_warn(
"Response too long: %zu bytes (max: %zu)", response_len, response_size - 1);
157 memcpy(response_out, env_value, response_len);
158 response_out[response_len] =
'\0';
161 unescape_response(response_out);
164 const char *remaining = semicolon + 1;
167 bool remaining_valid =
false;
168 for (
const char *p = remaining; *p; p++) {
170 remaining_valid =
true;
176 if (remaining_valid && remaining[0] !=
'\0') {
178 int written = snprintf(new_env,
sizeof(new_env),
"ASCII_CHAT_QUESTION_PROMPT_RESPONSE=%s", remaining);
179 if (written < 0 || (
size_t)written >=
sizeof(new_env)) {
180 log_warn(
"Failed to format new environment variable");
188 if (setenv(
"ASCII_CHAT_QUESTION_PROMPT_RESPONSE", remaining, 1) != 0) {
189 log_warn(
"Failed to update ASCII_CHAT_QUESTION_PROMPT_RESPONSE");
194 log_debug(
"Popped response from stack: '%s' (remaining: '%s')", response_out, remaining);
198 _putenv(
"ASCII_CHAT_QUESTION_PROMPT_RESPONSE=");
200 unsetenv(
"ASCII_CHAT_QUESTION_PROMPT_RESPONSE");
203 log_debug(
"Popped response from stack: '%s' (cleared env)", response_out);