X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=system.c;h=569a75d5b4df947c0166afe4b14855073a968188;hp=4b3b82c55b0b71fd4b71e3b0fb90c96fe2f47f05;hb=3c771f9e4ba46d3e39334cb20eab98221043f1e2;hpb=35e01a9601292b2f609e65c2ddb3990cba8f378e diff --git a/system.c b/system.c index 4b3b82c..569a75d 100644 --- a/system.c +++ b/system.c @@ -13,13 +13,16 @@ */ #include +#ifdef linux #include +#endif #include #include #include #include #include #include +#include #include @@ -64,15 +67,21 @@ static int system_board(struct ubus_context *ctx, struct ubus_object *obj, !strcasecmp(key, "processor") || !strcasecmp(key, "model name")) { - blobmsg_add_string(&b, "system", val + 2); - break; + strtoul(val + 2, &key, 0); + + if (key == (val + 2) || *key != 0) + { + blobmsg_add_string(&b, "system", val + 2); + break; + } } } fclose(f); } - if ((f = fopen("/tmp/sysinfo/model", "r")) != NULL) + if ((f = fopen("/tmp/sysinfo/model", "r")) != NULL || + (f = fopen("/proc/device-tree/model", "r")) != NULL) { if (fgets(line, sizeof(line), f)) { @@ -137,6 +146,11 @@ static int system_board(struct ubus_context *ctx, struct ubus_object *obj, continue; dest = blobmsg_alloc_string_buffer(&b, key, strlen(val)); + if (!dest) { + ERROR("Failed to allocate blob.\n"); + continue; + } + while (val && (ch = *(val++)) != 0) { switch (ch) { case '\'': @@ -174,23 +188,27 @@ static int system_info(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { - void *c; time_t now; struct tm *tm; +#ifdef linux struct sysinfo info; + void *c; + + if (sysinfo(&info)) + return UBUS_STATUS_UNKNOWN_ERROR; +#endif now = time(NULL); if (!(tm = localtime(&now))) return UBUS_STATUS_UNKNOWN_ERROR; - if (sysinfo(&info)) - return UBUS_STATUS_UNKNOWN_ERROR; - blob_buf_init(&b, 0); + blobmsg_add_u32(&b, "localtime", now + tm->tm_gmtoff); + +#ifdef linux blobmsg_add_u32(&b, "uptime", info.uptime); - blobmsg_add_u32(&b, "localtime", mktime(tm)); c = blobmsg_open_array(&b, "load"); blobmsg_add_u32(&b, NULL, info.loads[0]); @@ -199,16 +217,17 @@ static int system_info(struct ubus_context *ctx, struct ubus_object *obj, blobmsg_close_array(&b, c); c = blobmsg_open_table(&b, "memory"); - blobmsg_add_u32(&b, "total", info.mem_unit * info.totalram); - blobmsg_add_u32(&b, "free", info.mem_unit * info.freeram); - blobmsg_add_u32(&b, "shared", info.mem_unit * info.sharedram); - blobmsg_add_u32(&b, "buffered", info.mem_unit * info.bufferram); + blobmsg_add_u64(&b, "total", info.mem_unit * info.totalram); + blobmsg_add_u64(&b, "free", info.mem_unit * info.freeram); + blobmsg_add_u64(&b, "shared", info.mem_unit * info.sharedram); + blobmsg_add_u64(&b, "buffered", info.mem_unit * info.bufferram); blobmsg_close_table(&b, c); c = blobmsg_open_table(&b, "swap"); - blobmsg_add_u32(&b, "total", info.mem_unit * info.totalswap); - blobmsg_add_u32(&b, "free", info.mem_unit * info.freeswap); + blobmsg_add_u64(&b, "total", info.mem_unit * info.totalswap); + blobmsg_add_u64(&b, "free", info.mem_unit * info.freeswap); blobmsg_close_table(&b, c); +#endif ubus_send_reply(ctx, req, b.head); @@ -270,7 +289,7 @@ static int watchdog_set(struct ubus_context *ctx, struct ubus_object *obj, if (tb[WDT_STOP]) watchdog_set_stopped(blobmsg_get_bool(tb[WDT_STOP])); - if (watchdog_fd() < 0) + if (watchdog_fd() == NULL) status = "offline"; else if (watchdog_get_stopped()) status = "stopped";