X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=lib%2Futils.c;h=a5aec70e352f71a27634dc454d93418e6948307b;hb=ad21d48762fa70838d4ab4fbe8fe2a2e8a4dcef1;hp=de44e8b998b0236890acf1f7209420e1fd49c988;hpb=1d5788f77942214706d39fd0fb79196ef127a8ab;p=platform%2Fupstream%2Fcryptsetup.git diff --git a/lib/utils.c b/lib/utils.c index de44e8b..a5aec70 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -1,13 +1,15 @@ /* * utils - miscellaneous device utilities for cryptsetup * - * Copyright (C) 2004, Christophe Saout + * Copyright (C) 2004, Jana Saout * Copyright (C) 2004-2007, Clemens Fruhwirth * Copyright (C) 2009-2012, Red Hat, Inc. All rights reserved. + * Copyright (C) 2009-2012, Milan Broz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -30,7 +32,8 @@ unsigned crypt_getpagesize(void) { - return (unsigned)sysconf(_SC_PAGESIZE); + long r = sysconf(_SC_PAGESIZE); + return r < 0 ? DEFAULT_MEM_ALIGNMENT : r; } static int get_alignment(int fd) @@ -96,16 +99,19 @@ ssize_t write_blockwise(int fd, int bsize, void *orig_buf, size_t count) goto out; r = read(fd, hangover_buf, bsize); - if (r < 0 || r != bsize) + if (r < 0 || r < hangover) goto out; + if (r < bsize) + bsize = r; + r = lseek(fd, -bsize, SEEK_CUR); if (r < 0) goto out; memcpy(hangover_buf, (char*)buf + solid, hangover); r = write(fd, hangover_buf, bsize); - if (r < 0 || r != bsize) + if (r < 0 || r < hangover) goto out; } ret = count; @@ -145,7 +151,7 @@ ssize_t read_blockwise(int fd, int bsize, void *orig_buf, size_t count) { if (!hangover_buf) goto out; r = read(fd, hangover_buf, bsize); - if (r < 0 || r != bsize) + if (r < 0 || r < hangover) goto out; memcpy((char *)buf + solid, hangover_buf, hangover); @@ -238,7 +244,7 @@ int crypt_memlock_inc(struct crypt_device *ctx) log_err(ctx, _("Cannot get process priority.\n")); else if (setpriority(PRIO_PROCESS, 0, DEFAULT_PROCESS_PRIORITY)) - log_err(ctx, _("setpriority %d failed: %s\n"), + log_dbg("setpriority %d failed: %s", DEFAULT_PROCESS_PRIORITY, strerror(errno)); } return _memlock_count ? 1 : 0; @@ -251,7 +257,7 @@ int crypt_memlock_dec(struct crypt_device *ctx) if (munlockall() == -1) log_err(ctx, _("Cannot unlock memory.\n")); if (setpriority(PRIO_PROCESS, 0, _priority)) - log_err(ctx, _("setpriority %d failed: %s\n"), _priority, strerror(errno)); + log_dbg("setpriority %d failed: %s", _priority, strerror(errno)); } return _memlock_count ? 1 : 0; }