#include #include #include #include #include #include "util/util.h" #include "util/debug.h" #define CHUNK_SIZE 16384 int gzip_decompress_to_file(const char *input, int output_fd) { int ret = Z_STREAM_ERROR; int input_fd; void *ptr; int len; struct stat stbuf; unsigned char buf[CHUNK_SIZE]; z_stream zs = { .zalloc = Z_NULL, .zfree = Z_NULL, .opaque = Z_NULL, .avail_in = 0, .next_in = Z_NULL, }; input_fd = open(input, O_RDONLY); if (input_fd < 0) return -1; if (fstat(input_fd, &stbuf) < 0) goto out_close; ptr = mmap(NULL, stbuf.st_size, PROT_READ, MAP_PRIVATE, input_fd, 0); if (ptr == MAP_FAILED) goto out_close; if (inflateInit2(&zs, 16 + MAX_WBITS) != Z_OK) goto out_unmap; zs.next_in = ptr; zs.avail_in = stbuf.st_size; do { zs.next_out = buf; zs.avail_out = CHUNK_SIZE; ret = inflate(&zs, Z_NO_FLUSH); switch (ret) { case Z_NEED_DICT: ret = Z_DATA_ERROR; /* fall through */ case Z_DATA_ERROR: case Z_MEM_ERROR: goto out; default: break; } len = CHUNK_SIZE - zs.avail_out; if (writen(output_fd, buf, len) != len) { ret = Z_DATA_ERROR; goto out; } } while (ret != Z_STREAM_END); out: inflateEnd(&zs); out_unmap: munmap(ptr, stbuf.st_size); out_close: close(input_fd); return ret == Z_STREAM_END ? 0 : -1; } ='submit' value='switch'/> net-next plumbingsTobias Klauser
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Ploskey <zach@ploskey.com>2017-01-22 00:47:19 -0800
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>2017-01-22 12:47:06 +0200
commitcfee5d63767b2e7997c1f36420d008abbe61565c (patch)
treec66a512525d224f9675c33a8d156e0f058db1de6 /tools/thermal
parent5a00b6c2438460b870a451f14593fc40d3c7edf6 (diff)
platform/x86: ideapad-laptop: handle ACPI event 1
On Ideapad laptops, ACPI event 1 is currently not handled. Many models log "ideapad_laptop: Unknown event: 1" every 20 seconds or so while running on battery power. Some convertible laptops receive this event when switching in and out of tablet mode. This adds and additional case for event 1 in ideapad_acpi_notify to call ideapad_input_report(priv, vpc_bit), so that the event is reported to userspace and we avoid unnecessary logging. Fixes bug #107481 (https://bugzilla.kernel.org/show_bug.cgi?id=107481) Fixes bug #65751 (https://bugzilla.kernel.org/show_bug.cgi?id=65751) Signed-off-by: Zach Ploskey <zach@ploskey.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Diffstat (limited to 'tools/thermal')