FlexRAN control delegation: write/remove depending if payload present
This commit is contained in:
@@ -434,40 +434,47 @@ int flexran_agent_control_delegation(mid_t mod_id, const void *params, Protocol_
|
|||||||
RC.flexran[mod_id]->cache_name,
|
RC.flexran[mod_id]->cache_name,
|
||||||
control_delegation_msg->name);
|
control_delegation_msg->name);
|
||||||
if (len >= sizeof(target)) {
|
if (len >= sizeof(target)) {
|
||||||
LOG_E(FLEXRAN_AGENT, "target has been truncated, cannot write file\n");
|
LOG_E(FLEXRAN_AGENT, "target has been truncated, cannot write file name\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* use low-level API: check whether exists while creating so we can abort if
|
if (control_delegation_msg->has_payload) {
|
||||||
* it exists to not overwrite anything */
|
/* use low-level API: check whether exists while creating so we can abort if
|
||||||
int fd = open(target, O_CREAT | O_WRONLY | O_EXCL, S_IRUSR | S_IWUSR);
|
* it exists to not overwrite anything */
|
||||||
if (fd >= 0) {
|
int fd = open(target, O_CREAT | O_WRONLY | O_EXCL, S_IRUSR | S_IWUSR);
|
||||||
ssize_t l = write(fd,
|
if (fd >= 0) {
|
||||||
control_delegation_msg->payload.data,
|
ssize_t l = write(fd,
|
||||||
control_delegation_msg->payload.len);
|
control_delegation_msg->payload.data,
|
||||||
close(fd);
|
control_delegation_msg->payload.len);
|
||||||
if (l < control_delegation_msg->payload.len) {
|
close(fd);
|
||||||
LOG_E(FLEXRAN_AGENT,
|
if (l < control_delegation_msg->payload.len) {
|
||||||
"could not write complete control delegation to %s: only %ld out of "
|
LOG_E(FLEXRAN_AGENT,
|
||||||
"%ld bytes\n",
|
"could not write complete control delegation to %s: only %ld out of "
|
||||||
target,
|
"%ld bytes\n",
|
||||||
l,
|
target,
|
||||||
control_delegation_msg->payload.len);
|
l,
|
||||||
return 0;
|
control_delegation_msg->payload.len);
|
||||||
} else if (l < 0) {
|
return 0;
|
||||||
LOG_E(FLEXRAN_AGENT, "can not write control delegation data to %s: %s\n",
|
} else if (l < 0) {
|
||||||
target, strerror(errno));
|
LOG_E(FLEXRAN_AGENT, "can not write control delegation data to %s: %s\n",
|
||||||
return 0;
|
target, strerror(errno));
|
||||||
}
|
return 0;
|
||||||
LOG_I(FLEXRAN_AGENT, "wrote shared object %s\n", target);
|
}
|
||||||
} else {
|
LOG_I(FLEXRAN_AGENT, "wrote shared object %s\n", target);
|
||||||
if (errno == EEXIST) {
|
|
||||||
LOG_I(FLEXRAN_AGENT, "file %s already exists, remove it first\n", target);
|
|
||||||
} else {
|
} else {
|
||||||
LOG_E(FLEXRAN_AGENT, "can not write control delegation data to %s: %s\n",
|
if (errno == EEXIST) {
|
||||||
target, strerror(errno));
|
LOG_I(FLEXRAN_AGENT, "file %s already exists, remove it first\n", target);
|
||||||
return 0;
|
} else {
|
||||||
|
LOG_E(FLEXRAN_AGENT, "can not write control delegation data to %s: %s\n",
|
||||||
|
target, strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
LOG_W(FLEXRAN_AGENT, "remove file %s\n", target);
|
||||||
|
int rc = remove(target);
|
||||||
|
if (rc < 0)
|
||||||
|
LOG_E(FLEXRAN_AGENT, "cannot remove file %s: %s\n", target, strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user