MCPcopy Create free account
hub / github.com/davmac314/dinit / process_getallenv

Method process_getallenv

src/control.cc:1204–1245  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1202}
1203
1204bool control_conn_t::process_getallenv()
1205{
1206 // 1 byte packet type
1207 // 1 byte reserved - must be 0
1208
1209 constexpr int pkt_size = 2;
1210 if (rbuf.get_length() < pkt_size) {
1211 chklen = pkt_size;
1212 return true;
1213 }
1214
1215 uint8_t reserved_byte = rbuf[1];
1216 if (reserved_byte != 0) {
1217 char badreqRep[] = { (char)cp_rply::BADREQ };
1218 if (!queue_packet(badreqRep, 1)) return false;
1219 bad_conn_close = true;
1220 return true;
1221 }
1222
1223 // The reply looks like:
1224 // 1 byte - reply type
1225 // sizeof(size_t) - reply data size
1226 // n bytes - reply data (NAME=VALUE, separated by nul characters)
1227
1228 std::vector<char> env_block;
1229 constexpr size_t env_block_hdr_size = sizeof(size_t) + 1;
1230 env_block.resize(env_block_hdr_size);
1231
1232 rbuf.consume(pkt_size);
1233 auto env = main_env.build();
1234 for (const char *env_var : env.env_list) {
1235 if (env_var != nullptr) {
1236 env_block.insert(env_block.end(), env_var, env_var + strlen(env_var) + 1);
1237 }
1238 }
1239
1240 env_block[0] = (char)cp_rply::ALLENV;
1241 size_t block_size = env_block.size() - env_block_hdr_size;
1242 memcpy(env_block.data() + 1, &block_size, sizeof(block_size));
1243 if (!queue_packet(std::move(env_block))) return false;
1244 return true;
1245}
1246
1247bool control_conn_t::process_listenenv()
1248{

Callers

nothing calls this directly

Calls 7

get_lengthMethod · 0.80
consumeMethod · 0.80
buildMethod · 0.80
insertMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected