/*
* utils - miscellaneous device utilities for cryptsetup
*
- * Copyright (C) 2004, Christophe Saout <christophe@saout.de>
+ * Copyright (C) 2004, Jana Saout <jana@saout.de>
* Copyright (C) 2004-2007, Clemens Fruhwirth <clemens@endorphin.org>
* 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
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)
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;