file: create a file on write if it does not exist

Signed-off-by: Luka Perkov <luka@openwrt.org>
This commit is contained in:
Luka Perkov 2014-01-29 11:21:57 +00:00 committed by Jo-Philipp Wich
parent ec21f653b9
commit 11f5072bb1

12
file.c
View file

@ -203,17 +203,15 @@ rpc_file_write(struct ubus_context *ctx, struct ubus_object *obj,
struct blob_attr *msg) struct blob_attr *msg)
{ {
int fd; int fd;
char *path; struct blob_attr *tb[__RPC_F_MAX];
struct stat s;
struct blob_attr **tb;
if (!(tb = rpc_check_path(msg, &path, &s))) blobmsg_parse(rpc_file_policy, __RPC_F_MAX, tb,
return rpc_errno_status(); blob_data(msg), blob_len(msg));
if (!tb[RPC_F_DATA]) if (!tb[RPC_F_PATH] || !tb[RPC_F_DATA])
return UBUS_STATUS_INVALID_ARGUMENT; return UBUS_STATUS_INVALID_ARGUMENT;
if ((fd = open(path, O_WRONLY)) < 0) if ((fd = open(blobmsg_data(tb[RPC_F_PATH]), O_CREAT | O_TRUNC | O_WRONLY)) < 0)
return rpc_errno_status(); return rpc_errno_status();
write(fd, blobmsg_data(tb[RPC_F_DATA]), blobmsg_data_len(tb[RPC_F_DATA])); write(fd, blobmsg_data(tb[RPC_F_DATA]), blobmsg_data_len(tb[RPC_F_DATA]));