Whamcloud - gitweb
e2fsck: track errors/badness found for each inode
[tools/e2fsprogs.git] / misc / e2undo.c
index 4bc41c9..a43c26f 100644 (file)
@@ -10,6 +10,7 @@
  * %End-Header%
  */
 
+#include "config.h"
 #include <stdio.h>
 #include <stdlib.h>
 #ifdef HAVE_GETOPT_H
 #include "ext2fs/ext2fs.h"
 #include "nls-enable.h"
 
-unsigned char mtime_key[] = "filesystem MTIME";
-unsigned char uuid_key[] = "filesystem UUID";
-unsigned char blksize_key[] = "filesystem BLKSIZE";
+static unsigned char mtime_key[] = "filesystem MTIME";
+static unsigned char uuid_key[] = "filesystem UUID";
+static unsigned char blksize_key[] = "filesystem BLKSIZE";
 
-static void usage(char *prg_name)
+static char *prg_name;
+
+static void usage(void)
 {
        fprintf(stderr,
                _("Usage: %s <transaction file> <filesystem>\n"), prg_name);
        exit(1);
-
 }
 
 static int check_filesystem(TDB_CONTEXT *tdb, io_channel channel)
@@ -44,10 +46,10 @@ static int check_filesystem(TDB_CONTEXT *tdb, io_channel channel)
        struct ext2_super_block super;
 
        io_channel_set_blksize(channel, SUPERBLOCK_OFFSET);
-       retval = io_channel_read_blk(channel, 1, -SUPERBLOCK_SIZE, &super);
+       retval = io_channel_read_blk64(channel, 1, -SUPERBLOCK_SIZE, &super);
        if (retval) {
-               com_err(__FUNCTION__,
-                       retval, _("Failed to read the file system data \n"));
+               com_err(prg_name, retval,
+                       "%s", _("Failed to read the file system data \n"));
                return retval;
        }
 
@@ -56,7 +58,7 @@ static int check_filesystem(TDB_CONTEXT *tdb, io_channel channel)
        tdb_data = tdb_fetch(tdb, tdb_key);
        if (!tdb_data.dptr) {
                retval = EXT2_ET_TDB_SUCCESS + tdb_error(tdb);
-               com_err(__FUNCTION__, retval,
+               com_err(prg_name, retval,
                        _("Failed tdb_fetch %s\n"), tdb_errorstr(tdb));
                return retval;
        }
@@ -64,7 +66,7 @@ static int check_filesystem(TDB_CONTEXT *tdb, io_channel channel)
        s_mtime = *(__u32 *)tdb_data.dptr;
        if (super.s_mtime != s_mtime) {
 
-               com_err(__FUNCTION__, 0,
+               com_err(prg_name, 0,
                        _("The file system Mount time didn't match %u\n"),
                        s_mtime);
 
@@ -77,13 +79,13 @@ static int check_filesystem(TDB_CONTEXT *tdb, io_channel channel)
        tdb_data = tdb_fetch(tdb, tdb_key);
        if (!tdb_data.dptr) {
                retval = EXT2_ET_TDB_SUCCESS + tdb_error(tdb);
-               com_err(__FUNCTION__, retval,
+               com_err(prg_name, retval,
                        _("Failed tdb_fetch %s\n"), tdb_errorstr(tdb));
                return retval;
        }
        memcpy(s_uuid, tdb_data.dptr, sizeof(s_uuid));
        if (memcmp(s_uuid, super.s_uuid, sizeof(s_uuid))) {
-               com_err(__FUNCTION__, 0,
+               com_err(prg_name, 0, "%s",
                        _("The file system UUID didn't match \n"));
                return -1;
        }
@@ -102,7 +104,7 @@ static int set_blk_size(TDB_CONTEXT *tdb, io_channel channel)
        tdb_data = tdb_fetch(tdb, tdb_key);
        if (!tdb_data.dptr) {
                retval = EXT2_ET_TDB_SUCCESS + tdb_error(tdb);
-               com_err(__FUNCTION__, retval,
+               com_err(prg_name, retval,
                        _("Failed tdb_fetch %s\n"), tdb_errorstr(tdb));
                return retval;
        }
@@ -124,8 +126,8 @@ int main(int argc, char *argv[])
        io_channel channel;
        errcode_t retval;
        int  mount_flags;
-       unsigned long  blk_num;
-       char *device_name, *tdb_file, *prg_name;
+       blk64_t  blk_num;
+       char *device_name, *tdb_file;
        io_manager manager = unix_io_manager;
 
 #ifdef ENABLE_NLS
@@ -133,7 +135,9 @@ int main(int argc, char *argv[])
        setlocale(LC_CTYPE, "");
        bindtextdomain(NLS_CAT_NAME, LOCALEDIR);
        textdomain(NLS_CAT_NAME);
+       set_com_err_gettext(gettext);
 #endif
+       add_error_table(&et_ext2_error_table);
 
        prg_name = argv[0];
        while((c = getopt(argc, argv, "f")) != EOF) {
@@ -142,12 +146,12 @@ int main(int argc, char *argv[])
                                force = 1;
                                break;
                        default:
-                               usage(prg_name);
+                               usage();
                }
        }
 
-       if (argc != optind+2)
-               usage(prg_name);
+       if (argc != optind + 2)
+               usage();
 
        tdb_file = argv[optind];
        device_name = argv[optind+1];
@@ -168,8 +172,8 @@ int main(int argc, char *argv[])
        }
 
        if (mount_flags & EXT2_MF_MOUNTED) {
-               com_err(prg_name, retval, _("undoe2fs should only be run on "
-                               "unmounted file system\n"));
+               com_err(prg_name, retval, "%s", _("e2undo should only be run "
+                                               "on unmounted file system\n"));
                exit(1);
        }
 
@@ -202,10 +206,10 @@ int main(int argc, char *argv[])
                                _("Failed tdb_fetch %s\n"), tdb_errorstr(tdb));
                        exit(1);
                }
-               blk_num = *(unsigned long *)key.dptr;
-               printf(_("Replayed transaction of size %zd at location %ld\n"),
+               blk_num = *(blk64_t *)key.dptr;
+               printf(_("Replayed transaction of size %zd at location %llu\n"),
                                                        data.dsize, blk_num);
-               retval = io_channel_write_blk(channel, blk_num,
+               retval = io_channel_write_blk64(channel, blk_num,
                                                -data.dsize, data.dptr);
                if (retval == -1) {
                        com_err(prg_name, retval,