diff options
author | Luka Perkov <luka@openwrt.org> | 2014-01-29 11:21:57 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2014-01-29 13:29:40 +0000 |
commit | 11f5072bb197c8571518222f8d6572b66338dc8d (patch) | |
tree | 27075621df10fb281cb99ea04c7523c61c6b1aad | |
parent | ec21f653b936b54e4d788d77bfce18634255adb7 (diff) | |
download | rpcd-11f5072bb197c8571518222f8d6572b66338dc8d.tar.gz |
file: create a file on write if it does not exist
Signed-off-by: Luka Perkov <luka@openwrt.org>
-rw-r--r-- | file.c | 12 |
1 files changed, 5 insertions, 7 deletions
@@ -203,17 +203,15 @@ rpc_file_write(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { int fd; - char *path; - struct stat s; - struct blob_attr **tb; + struct blob_attr *tb[__RPC_F_MAX]; - if (!(tb = rpc_check_path(msg, &path, &s))) - return rpc_errno_status(); + blobmsg_parse(rpc_file_policy, __RPC_F_MAX, tb, + 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; - 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(); write(fd, blobmsg_data(tb[RPC_F_DATA]), blobmsg_data_len(tb[RPC_F_DATA])); |