Whamcloud - gitweb
Add inherit flags for project quota
[tools/e2fsprogs.git] / lib / ext2fs / read_bb_file.c
index 2ac71f4..8d1ad1a 100644 (file)
@@ -4,11 +4,12 @@
  * Copyright (C) 1994, 1995, 2000 Theodore Ts'o.
  *
  * %Begin-Header%
- * This file may be redistributed under the terms of the GNU Public
- * License.
+ * This file may be redistributed under the terms of the GNU Library
+ * General Public License, version 2.
  * %End-Header%
  */
 
+#include "config.h"
 #include <stdio.h>
 #include <string.h>
 #if HAVE_UNISTD_H
@@ -29,7 +30,7 @@
 /*
  * Reads a list of bad blocks from  a FILE *
  */
-errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f, 
+errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f,
                               ext2_badblocks_list *bb_list,
                               void *priv_data,
                               void (*invalid)(ext2_filsys fs,
@@ -38,7 +39,7 @@ errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f,
                                               void *priv_data))
 {
        errcode_t       retval;
-       blk_t           blockno;
+       blk64_t         blockno;
        int             count;
        char            buf[128];
 
@@ -54,12 +55,15 @@ errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f,
        while (!feof (f)) {
                if (fgets(buf, sizeof(buf), f) == NULL)
                        break;
-               count = sscanf(buf, "%u", &blockno);
+               count = sscanf(buf, "%llu", &blockno);
                if (count <= 0)
                        continue;
+               /* Badblocks isn't going to be updated for 64bit */
+               if (blockno >> 32)
+                       return EOVERFLOW;
                if (fs &&
                    ((blockno < fs->super->s_first_data_block) ||
-                   (blockno >= fs->super->s_blocks_count))) {
+                    (blockno >= ext2fs_blocks_count(fs->super)))) {
                        if (invalid)
                                (invalid)(fs, blockno, buf, priv_data);
                        continue;
@@ -76,7 +80,7 @@ struct compat_struct {
 };
 
 static void call_compat_invalid(ext2_filsys fs, blk_t blk,
-                               char *badstr EXT2FS_ATTR((unused)), 
+                               char *badstr EXT2FS_ATTR((unused)),
                                void *priv_data)
 {
        struct compat_struct *st;
@@ -90,7 +94,7 @@ static void call_compat_invalid(ext2_filsys fs, blk_t blk,
 /*
  * Reads a list of bad blocks from  a FILE *
  */
-errcode_t ext2fs_read_bb_FILE(ext2_filsys fs, FILE *f, 
+errcode_t ext2fs_read_bb_FILE(ext2_filsys fs, FILE *f,
                              ext2_badblocks_list *bb_list,
                              void (*invalid)(ext2_filsys fs, blk_t blk))
 {