| 1157 | // |
| 1158 | |
| 1159 | static void cmp_procedure( gpre_req* request) |
| 1160 | { |
| 1161 | act* action = request->req_actions; |
| 1162 | gpre_prc* procedure = (gpre_prc*) action->act_object; |
| 1163 | |
| 1164 | // Remember the order of the references. The exec_proc blr verb |
| 1165 | // requires parameters to be in parameter order which may be changed |
| 1166 | // when there references are expanded. |
| 1167 | |
| 1168 | gpre_lls* outputs = NULL; |
| 1169 | ref* reference = request->req_references; |
| 1170 | if (reference) |
| 1171 | { |
| 1172 | for (gpre_lls** list = &outputs; reference; reference = reference->ref_next) |
| 1173 | { |
| 1174 | MSC_push((gpre_nod*) reference, list); |
| 1175 | list = &(*list)->lls_next; |
| 1176 | } |
| 1177 | } |
| 1178 | |
| 1179 | // Expand any incomplete references or values. |
| 1180 | |
| 1181 | expand_references(request->req_values); |
| 1182 | expand_references(request->req_references); |
| 1183 | |
| 1184 | request->req_blr = request->req_base = MSC_alloc(500); |
| 1185 | request->req_length = 500; |
| 1186 | if (request->req_flags & REQ_blr_version4) |
| 1187 | request->add_byte(blr_version4); |
| 1188 | else |
| 1189 | request->add_byte(blr_version5); |
| 1190 | request->add_byte(blr_begin); |
| 1191 | |
| 1192 | if (request->req_values) |
| 1193 | { |
| 1194 | request->req_vport = make_port(request, request->req_values); |
| 1195 | request->req_values = request->req_vport->por_references; |
| 1196 | } |
| 1197 | else |
| 1198 | request->req_count++; |
| 1199 | request->req_primary = make_port(request, request->req_references); |
| 1200 | request->req_references = request->req_primary->por_references; |
| 1201 | |
| 1202 | // build message definition for each port |
| 1203 | |
| 1204 | for (gpre_port* port = request->req_ports; port; port = port->por_next) |
| 1205 | cmp_port(port, request); |
| 1206 | |
| 1207 | if (request->req_values) |
| 1208 | { |
| 1209 | request->add_byte(blr_begin); |
| 1210 | make_send(request->req_vport, request); |
| 1211 | } |
| 1212 | |
| 1213 | if (gpreGlob.sw_ids) |
| 1214 | { |
| 1215 | request->add_byte(blr_exec_pid); |
| 1216 | request->add_word(procedure->prc_id); |
no test coverage detected