* [Cluster-devel] [PATCH 1/3] gfs2_convert: Add i18n support @ 2011-07-05 14:41 Carlos Maiolino 2011-07-05 14:41 ` [Cluster-devel] [PATCH 2/3] gfs2_convert: set translatable strings Carlos Maiolino ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Carlos Maiolino @ 2011-07-05 14:41 UTC (permalink / raw) To: cluster-devel.redhat.com Add the headers and macros needed to i18n support into gfs2_convert. --- gfs2/convert/gfs2_convert.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c index 20cca80..b47bbb7 100644 --- a/gfs2/convert/gfs2_convert.c +++ b/gfs2/convert/gfs2_convert.c @@ -23,6 +23,9 @@ #include <sys/time.h> #include <errno.h> #include <ctype.h> +#include <libintl.h> +#include <locale.h> +#define _(String) gettext(String) #include <linux/types.h> #include <linux/gfs2_ondisk.h> @@ -2112,6 +2115,10 @@ int main(int argc, char **argv) struct gfs2_buffer_head *bh; struct gfs2_options opts; + /* Set i18n support to gfs2_convert */ + setlocale(LC_ALL, ""); + textdomain("gfs2-utils"); + version(); process_parameters(argc, argv, &opts); error = init(&sb2); -- 1.7.5.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Cluster-devel] [PATCH 2/3] gfs2_convert: set translatable strings 2011-07-05 14:41 [Cluster-devel] [PATCH 1/3] gfs2_convert: Add i18n support Carlos Maiolino @ 2011-07-05 14:41 ` Carlos Maiolino 2011-07-05 14:56 ` Steven Whitehouse 2011-07-05 14:41 ` [Cluster-devel] [PATCH 3/3] i18n support: Add gfs2_convert to translatable list Carlos Maiolino 2011-07-05 14:56 ` [Cluster-devel] [PATCH 1/3] gfs2_convert: Add i18n support Steven Whitehouse 2 siblings, 1 reply; 6+ messages in thread From: Carlos Maiolino @ 2011-07-05 14:41 UTC (permalink / raw) To: cluster-devel.redhat.com This patch modify the strings of gfs2_convert to be able to receive translations. --- gfs2/convert/gfs2_convert.c | 206 ++++++++++++++++++++++--------------------- 1 files changed, 107 insertions(+), 99 deletions(-) diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c index b47bbb7..7f6135f 100644 --- a/gfs2/convert/gfs2_convert.c +++ b/gfs2/convert/gfs2_convert.c @@ -541,15 +541,15 @@ static int get_inode_metablocks(struct gfs2_sbd *sbp, struct gfs2_inode *ip, str /* Add dinode block to the list */ blk = malloc(sizeof(struct blocklist)); if (!blk) { - log_crit("Error: Can't allocate memory for indirect block fix\n"); + log_crit(_("Error: Can't allocate memory for indirect block fix\n")); return -1; } memset(blk, 0, sizeof(*blk)); blk->block = dibh->b_blocknr; blk->ptrbuf = malloc(bufsize); if (!blk->ptrbuf) { - log_crit("Error: Can't allocate memory" - " for file conversion.\n"); + log_crit(_("Error: Can't allocate memory" + " for file conversion.\n")); free(blk); return -1; } @@ -576,13 +576,14 @@ static int get_inode_metablocks(struct gfs2_sbd *sbp, struct gfs2_inode *ip, str newblk = malloc(sizeof(struct blocklist)); if (!newblk) { - log_crit("Error: Can't allocate memory for indirect block fix.\n"); + log_crit(_("Error: Can't allocate memory for indirect block fix.\n")); return -1; } memset(newblk, 0, sizeof(*newblk)); newblk->ptrbuf = malloc(bufsize); if (!newblk->ptrbuf) { - log_crit("Error: Can't allocate memory for file conversion.\n"); + /* FIXME: This message should be different, to not conflit with the above file conversion */ + log_crit(_("Error: Can't allocate memory for file conversion.\n")); free(newblk); return -1; } @@ -655,6 +656,7 @@ static int fix_ind_jdata(struct gfs2_sbd *sbp, struct gfs2_inode *ip, uint32_t d uint32_t gfs2_hgt, uint64_t dinode_size, struct blocklist *blk, struct blocklist *blocks) { + /*FIXME: Messages here should be different, to not conflit with messages in get_inode_metablocks */ struct blocklist *newblk; unsigned int len, bufsize; uint64_t *ptr1, block; @@ -675,13 +677,13 @@ static int fix_ind_jdata(struct gfs2_sbd *sbp, struct gfs2_inode *ip, uint32_t d newblk = malloc(sizeof(struct blocklist)); if (!newblk) { - log_crit("Error: Can't allocate memory for indirect block fix.\n"); + log_crit(_("Error: Can't allocate memory for indirect block fix.\n")); return -1; } memset(newblk, 0, sizeof(*newblk)); newblk->ptrbuf = malloc(bufsize); if (!newblk->ptrbuf) { - log_crit("Error: Can't allocate memory for file conversion.\n"); + log_crit(_("Error: Can't allocate memory for file conversion.\n")); free(newblk); return -1; } @@ -821,7 +823,7 @@ static int fix_cdpn_symlink(struct gfs2_sbd *sbp, struct gfs2_buffer_head *bh, s /* Save the symlink di_addr. We'll find the parent di_addr later */ fix = malloc(sizeof(struct inode_dir_block)); if (!fix) { - log_crit("Error: out of memory.\n"); + log_crit(_("Error: out of memory.\n")); return -1; } memset(fix, 0, sizeof(struct inode_dir_block)); @@ -855,7 +857,8 @@ static int fix_xattr(struct gfs2_sbd *sbp, struct gfs2_buffer_head *bh, struct g len = sbp->bsize - sizeof(struct gfs_indirect); buf = malloc(len); if (!buf) { - log_crit("Error: out of memory.\n"); + /*FIXME: Same message as fix_cdpn_symlink */ + log_crit(_("Error: out of memory.\n")); return -1; } old_hdr_sz = sizeof(struct gfs_indirect); @@ -896,7 +899,8 @@ static int adjust_inode(struct gfs2_sbd *sbp, struct gfs2_buffer_head *bh) /* Add this directory to the list of dirs to fix later. */ fixdir = malloc(sizeof(struct inode_block)); if (!fixdir) { - log_crit("Error: out of memory.\n"); + /*FIXME: Same message as fix_cdpn_symlink */ + log_crit(_("Error: out of memory.\n")); return -1; } memset(fixdir, 0, sizeof(struct inode_block)); @@ -990,7 +994,7 @@ static int inode_renumber(struct gfs2_sbd *sbp, uint64_t root_inode_addr, osi_li int error = 0; int rgs_processed = 0; - log_notice("Converting inodes.\n"); + log_notice(_("Converting inodes.\n")); sbp->md.next_inum = 1; /* starting inode numbering */ gettimeofday(&tv, NULL); seconds = tv.tv_sec; @@ -1008,7 +1012,7 @@ static int inode_renumber(struct gfs2_sbd *sbp, uint64_t root_inode_addr, osi_li /* doesn't think we hung. (This may take a long time). */ if (tv.tv_sec - seconds) { seconds = tv.tv_sec; - log_notice("\r%llu inodes from %d rgs converted.", + log_notice(_("\r%llu inodes from %d rgs converted."), (unsigned long long)sbp->md.next_inum, rgs_processed); fflush(stdout); @@ -1063,7 +1067,7 @@ static int inode_renumber(struct gfs2_sbd *sbp, uint64_t root_inode_addr, osi_li first = 0; } /* while 1 */ } /* for all rgs */ - log_notice("\r%llu inodes from %d rgs converted.", + log_notice(_("\r%llu inodes from %d rgs converted."), (unsigned long long)sbp->md.next_inum, rgs_processed); fflush(stdout); return 0; @@ -1104,7 +1108,7 @@ static int process_dirent_info(struct gfs2_inode *dip, struct gfs2_sbd *sbp, error = gfs2_dirent_first(dip, bh, &dent); if (error != IS_LEAF && error != IS_DINODE) { - log_crit("Error retrieving directory.\n"); + log_crit(_("Error retrieving directory.\n")); return -1; } error = 0; @@ -1129,7 +1133,7 @@ static int process_dirent_info(struct gfs2_inode *dip, struct gfs2_sbd *sbp, dirents_fixed++; if (tv.tv_sec - seconds) { seconds = tv.tv_sec; - log_notice("\r%llu directories, %llu dirents fixed.", + log_notice(_("\r%llu directories, %llu dirents fixed."), (unsigned long long)dirs_fixed, (unsigned long long)dirents_fixed); fflush(stdout); @@ -1140,7 +1144,7 @@ static int process_dirent_info(struct gfs2_inode *dip, struct gfs2_sbd *sbp, if (inum.no_formal_ino) { /* if not a sentinel (placeholder) */ error = fetch_inum(sbp, inum.no_addr, &inum, NULL); if (error) { - log_crit("Error retrieving inode 0x%llx\n", + log_crit(_("Error retrieving inode 0x%llx\n"), (unsigned long long)inum.no_addr); break; } @@ -1234,7 +1238,7 @@ static int fix_one_directory_exhash(struct gfs2_sbd *sbp, struct gfs2_inode *dip if (!error) /* end of file */ return 0; /* success */ else if (error != sizeof(uint64_t)) { - log_crit("fix_one_directory_exhash: error reading directory.\n"); + log_crit(_("fix_one_directory_exhash: error reading directory.\n")); return -1; } else { @@ -1250,7 +1254,7 @@ static int fix_one_directory_exhash(struct gfs2_sbd *sbp, struct gfs2_inode *dip /* read the leaf buffer in */ error = gfs2_get_leaf(dip, leaf_block, &bh_leaf); if (error) { - log_crit("Error reading leaf %llx\n", + log_crit(_("Error reading leaf %llx\n"), (unsigned long long)leaf_block); break; } @@ -1278,14 +1282,14 @@ static int process_directory(struct gfs2_sbd *sbp, uint64_t dirblock, uint64_t d /* fix the directory: either exhash (leaves) or linear (stuffed) */ if (dip->i_di.di_flags & GFS2_DIF_EXHASH) { if (fix_one_directory_exhash(sbp, dip, dentmod)) { - log_crit("Error fixing exhash directory.\n"); + log_crit(_("Error fixing exhash directory.\n")); inode_put(&dip); return -1; } } else { error = process_dirent_info(dip, sbp, dip->i_bh, dip->i_di.di_entries, dentmod); if (error && error != -EISDIR) { - log_crit("Error fixing linear directory.\n"); + log_crit(_("Error fixing linear directory.\n")); inode_put(&dip); return -1; } @@ -1312,7 +1316,7 @@ static int fix_directory_info(struct gfs2_sbd *sbp, osi_list_t *dir_to_fix) dirents_fixed = 0; gettimeofday(&tv, NULL); seconds = tv.tv_sec; - log_notice("\nFixing file and directory information.\n"); + log_notice(_("\nFixing file and directory information.\n")); fflush(stdout); tmp = NULL; /* for every directory in the list */ @@ -1327,7 +1331,7 @@ static int fix_directory_info(struct gfs2_sbd *sbp, osi_list_t *dir_to_fix) dir_iblk = (struct inode_block *)fix; dirblock = dir_iblk->di_addr; /* addr of dir inode */ if (process_directory(sbp, dirblock, 0)) { - log_crit("Error processing directory\n"); + log_crit(_("Error processing directory\n")); return -1; } } @@ -1363,13 +1367,13 @@ static int fix_cdpn_symlinks(struct gfs2_sbd *sbp, osi_list_t *cdpn_to_fix) /* convert symlink to empty dir */ error = fetch_inum(sbp, l_fix->di_addr, &fix, &eablk); if (error) { - log_crit("Error retrieving inode at block %llx\n", + log_crit(_("Error retrieving inode at block %llx\n"), (unsigned long long)l_fix->di_addr); break; } error = fetch_inum(sbp, l_fix->di_paddr, &dir, NULL); if (error) { - log_crit("Error retrieving inode at block %llx\n", + log_crit(_("Error retrieving inode at block %llx\n"), (unsigned long long)l_fix->di_paddr); break; } @@ -1385,7 +1389,7 @@ static int fix_cdpn_symlinks(struct gfs2_sbd *sbp, osi_list_t *cdpn_to_fix) /* fix the parent directory dirent entry for this inode */ error = process_directory(sbp, l_fix->di_paddr, l_fix->di_addr); if (error) { - log_crit("Error trying to fix cdpn dentry\n"); + log_crit(_("Error trying to fix cdpn dentry\n")); break; } free(l_fix); @@ -1419,17 +1423,17 @@ static int read_gfs1_jiindex(struct gfs2_sbd *sdp) unsigned int tmp_mode = 0; if(ip->i_di.di_size % sizeof(struct gfs1_jindex) != 0){ - log_crit("The size reported in the journal index" + log_crit(_("The size reported in the journal index" " inode is not a\n" - "\tmultiple of the size of a journal index.\n"); + "\tmultiple of the size of a journal index.\n")); return -1; } if(!(sd_jindex = (struct gfs1_jindex *)malloc(ip->i_di.di_size))) { - log_crit("Unable to allocate journal index\n"); + log_crit(_("Unable to allocate journal index\n")); return -1; } if(!memset(sd_jindex, 0, ip->i_di.di_size)) { - log_crit("Unable to zero journal index\n"); + log_crit(_("Unable to zero journal index\n")); return -1; } /* ugly hack @@ -1448,8 +1452,8 @@ static int read_gfs1_jiindex(struct gfs2_sbd *sdp) if(!error) break; if (error != sizeof(struct gfs1_jindex)){ - log_crit("An error occurred while reading the" - " journal index file.\n"); + log_crit(_("An error occurred while reading the" + " journal index file.\n")); goto fail; } journ = sd_jindex + j; @@ -1458,7 +1462,7 @@ static int read_gfs1_jiindex(struct gfs2_sbd *sdp) } ip->i_di.di_mode = tmp_mode; if(j * sizeof(struct gfs1_jindex) != ip->i_di.di_size){ - log_crit("journal inode size invalid\n"); + log_crit(_("journal inode size invalid\n")); goto fail; } sdp->md.journals = sdp->orig_journals = j; @@ -1507,7 +1511,7 @@ static int init(struct gfs2_sbd *sbp) sbp->bsize = sbp->sd_sb.sb_bsize; osi_list_init(&sbp->rglist); if (compute_constants(sbp)) { - log_crit("Error: Bad constants (1)\n"); + log_crit(_("Error: Bad constants (1)\n")); exit(-1); } @@ -1529,13 +1533,13 @@ static int init(struct gfs2_sbd *sbp) brelse(bh); if (compute_heightsize(sbp, sbp->sd_heightsize, &sbp->sd_max_height, sbp->bsize, sbp->sd_diptrs, sbp->sd_inptrs)) { - log_crit("Error: Bad constants (1)\n"); + log_crit(_("Error: Bad constants (1)\n")); exit(-1); } if (compute_heightsize(sbp, sbp->sd_jheightsize, &sbp->sd_max_jheight, sbp->sd_jbsize, sbp->sd_diptrs, sbp->sd_inptrs)) { - log_crit("Error: Bad constants (1)\n"); + log_crit(_("Error: Bad constants (1)\n")); exit(-1); } /* -------------------------------------------------------- */ @@ -1546,13 +1550,13 @@ static int init(struct gfs2_sbd *sbp) memset(gfs2_heightsize, 0, sizeof(gfs2_heightsize)); if (compute_heightsize(sbp, gfs2_heightsize, &gfs2_max_height, sbp->bsize, sbp->sd_diptrs, gfs2_inptrs)) { - log_crit("Error: Bad constants (1)\n"); + log_crit(_("Error: Bad constants (1)\n")); exit(-1); } memset(gfs2_jheightsize, 0, sizeof(gfs2_jheightsize)); if (compute_heightsize(sbp, gfs2_jheightsize, &gfs2_max_jheight, sbp->sd_jbsize, sbp->sd_diptrs, gfs2_inptrs)) { - log_crit("Error: Bad constants (1)\n"); + log_crit(_("Error: Bad constants (1)\n")); exit(-1); } @@ -1563,7 +1567,7 @@ static int init(struct gfs2_sbd *sbp) sbp->sd_sb.sb_header.mh_type != GFS_METATYPE_SB || sbp->sd_sb.sb_header.mh_format != GFS_FORMAT_SB || sbp->sd_sb.sb_multihost_format != GFS_FORMAT_MULTI) { - log_crit("Error: %s does not look like a gfs1 filesystem.\n", + log_crit(_("Error: %s does not look like a gfs1 filesystem.\n"), device); close(sbp->device_fd); exit(-1); @@ -1585,16 +1589,16 @@ static int init(struct gfs2_sbd *sbp) /* look like a directory, temporarily. */ sbp->md.riinode->i_di.di_mode &= ~S_IFMT; sbp->md.riinode->i_di.di_mode |= S_IFDIR; - printf("Examining file system"); + printf(_("Examining file system")); if (gfs1_ri_update(sbp, 0, &rgcount, 0)){ - log_crit("Unable to fill in resource group information.\n"); + log_crit(_("Unable to fill in resource group information.\n")); return -1; } printf("\n"); fflush(stdout); inode_put(&sbp->md.riinode); inode_put(&sbp->md.jiinode); - log_debug("%d rgs found.\n", rgcount); + log_debug(_("%d rgs found.\n"), rgcount); return 0; }/* fill_super_block */ @@ -1603,14 +1607,14 @@ static int init(struct gfs2_sbd *sbp) /* ------------------------------------------------------------------------- */ static void give_warning(void) { - printf("This program will convert a gfs1 filesystem to a " \ - "gfs2 filesystem.\n"); - printf("WARNING: This can't be undone. It is strongly advised " \ - "that you:\n\n"); - printf(" 1. Back up your entire filesystem first.\n"); - printf(" 2. Run gfs_fsck first to ensure filesystem integrity.\n"); - printf(" 3. Make sure the filesystem is NOT mounted from any node.\n"); - printf(" 4. Make sure you have the latest software versions.\n"); + printf(_("This program will convert a gfs1 filesystem to a " \ + "gfs2 filesystem.\n")); + printf(_("WARNING: This can't be undone. It is strongly advised " \ + "that you:\n\n")); + printf(_(" 1. Back up your entire filesystem first.\n")); + printf(_(" 2. Run gfs_fsck first to ensure filesystem integrity.\n")); + printf(_(" 3. Make sure the filesystem is NOT mounted from any node.\n")); + printf(_(" 4. Make sure you have the latest software versions.\n")); }/* give_warning */ /* ------------------------------------------------------------------------- */ @@ -1618,7 +1622,7 @@ static void give_warning(void) /* ------------------------------------------------------------------------- */ static void version(void) { - log_notice("gfs2_convert version %s (built %s %s)\n", VERSION, + log_notice(_("gfs2_convert version %s (built %s %s)\n"), VERSION, __DATE__, __TIME__); log_notice("%s\n\n", REDHAT_COPYRIGHT); } @@ -1629,15 +1633,15 @@ static void version(void) static void usage(const char *name) { give_warning(); - printf("\nUsage:\n"); - printf("%s [-hnqvVy] <device>\n\n", name); + printf(_("\nUsage:\n")); + printf(_("%s [-hnqvVy] <device>\n\n"), name); printf("Flags:\n"); - printf("\th - print this help message\n"); - printf("\tn - assume 'no' to all questions\n"); - printf("\tq - quieter output\n"); - printf("\tv - more verbose output\n"); - printf("\tV - print version information\n"); - printf("\ty - assume 'yes' to all questions\n"); + printf(_("\th - print this help message\n")); + printf(_("\tn - assume 'no' to all questions\n")); + printf(_("\tq - quieter output\n")); + printf(_("\tv - more verbose output\n")); + printf(_("\tV - print version information\n")); + printf(_("\ty - assume 'yes' to all questions\n")); }/* usage */ /* ------------------------------------------------------------------------- */ @@ -1677,7 +1681,7 @@ static void process_parameters(int argc, char **argv, struct gfs2_options *opts) opts->yes = 1; break; default: - fprintf(stderr,"Parameter not understood: %c\n", c); + fprintf(stderr,_("Parameter not understood: %c\n"), c); usage(argv[0]); exit(0); } @@ -1686,11 +1690,11 @@ static void process_parameters(int argc, char **argv, struct gfs2_options *opts) strcpy(device, argv[optind]); opts->device = device; if(!opts->device) { - fprintf(stderr, "Please use '-h' for usage.\n"); + fprintf(stderr, _("Please use '-h' for usage.\n")); exit(1); } } else { - fprintf(stderr, "No device specified. Use '-h' for usage.\n"); + fprintf(stderr, _("No device specified. Use '-h' for usage.\n")); exit(1); } } /* process_parameters */ @@ -1740,7 +1744,7 @@ static int journ_space_to_rg(struct gfs2_sbd *sdp) mh.mh_magic = GFS2_MAGIC; mh.mh_type = GFS2_METATYPE_RB; mh.mh_format = GFS2_FORMAT_RB; - log_notice("Converting journal space to rg space.\n"); + log_notice(_("Converting journal space to rg space.\n")); /* Go through each journal, converting them one by one */ for (j = 0; j < sdp->orig_journals; j++) { /* for each journal */ uint64_t size; @@ -1760,18 +1764,18 @@ static int journ_space_to_rg(struct gfs2_sbd *sdp) (rgd->ri.ri_addr > rgdhigh->ri.ri_addr))) rgdhigh = rgd; } /* for each rg */ - log_info("Addr 0x%llx comes after rg at addr 0x%llx\n", + log_info(_("Addr 0x%llx comes after rg at addr 0x%llx\n"), (unsigned long long)jndx->ji_addr, (unsigned long long)rgdhigh->ri.ri_addr); if (!rgdhigh) { /* if we somehow didn't find one. */ - log_crit("Error: No suitable rg found for journal.\n"); + log_crit(_("Error: No suitable rg found for journal.\n")); return -1; } /* Allocate a new rgd entry which includes rg and ri. */ /* convert the gfs1 rgrp into a new gfs2 rgrp */ rgd = malloc(sizeof(struct rgrp_list)); if (!rgd) { - log_crit("Error: unable to allocate memory for rg conversion.\n"); + log_crit(_("Error: unable to allocate memory for rg conversion.\n")); return -1; } memset(rgd, 0, sizeof(struct rgrp_list)); @@ -1808,7 +1812,7 @@ static int journ_space_to_rg(struct gfs2_sbd *sdp) memset(rgd->bh[x]->b_data, 0, sdp->bsize); } if (gfs2_compute_bitstructs(sdp, rgd)) { - log_crit("gfs2_convert: Error converting bitmaps.\n"); + log_crit(_("gfs2_convert: Error converting bitmaps.\n")); exit(-1); } convert_bitmaps(sdp, rgd); @@ -1839,7 +1843,7 @@ static void update_inode_file(struct gfs2_sbd *sdp) if (count != sizeof(uint64_t)) die("update_inode_file\n"); - log_debug("\nNext Inum: %llu\n", (unsigned long long)sdp->md.next_inum); + log_debug(_("\nNext Inum: %llu\n"), (unsigned long long)sdp->md.next_inum); }/* update_inode_file */ /* ------------------------------------------------------------------------- */ @@ -1869,7 +1873,7 @@ static void remove_obsolete_gfs1(struct gfs2_sbd *sbp) { struct gfs2_inum inum; - log_notice("Removing obsolete GFS1 file system structures.\n"); + log_notice(_("Removing obsolete GFS1 file system structures.\n")); fflush(stdout); /* Delete the old gfs1 Journal index: */ gfs2_inum_in(&inum, (char *)&raw_gfs1_ondisk_sb.sb_jindex_di); @@ -1906,7 +1910,7 @@ static int conv_build_jindex(struct gfs2_sbd *sdp) for (j = 0; j < sdp->md.journals; j++) { char name[256]; - printf("Writing journal #%d...", j + 1); + printf(_("Writing journal #%d..."), j + 1); fflush(stdout); sprintf(name, "journal%u", j); sdp->md.journal[j] = createi(sdp->md.jiinode, name, S_IFREG | @@ -1914,7 +1918,7 @@ static int conv_build_jindex(struct gfs2_sbd *sdp) write_journal(sdp, j, sdp->jsize << 20 >> sdp->sd_sb.sb_bsize_shift); inode_put(&sdp->md.journal[j]); - printf("done.\n"); + printf(_("done.\n")); fflush(stdout); } @@ -2032,7 +2036,7 @@ static void copy_quotas(struct gfs2_sbd *sdp) err = gfs2_lookupi(sdp->master_dir, "quota", 5, &nq_ip); if (err) - die("Couldn't lookup new quota file: %d\n", err); + die(_("Couldn't lookup new quota file: %d\n"), err); gfs2_inum_in(&inum, (char *)&raw_gfs1_ondisk_sb.sb_quota_di); oq_ip = inode_read(sdp, inum.no_addr); @@ -2079,17 +2083,20 @@ static int __attribute__((format(printf, 3, 4))) gfs2_query(int *setonabort, printf("\n"); fflush(NULL); if (response == 0x3) { /* if interrupted, by ctrl-c */ - response = generic_interrupt("Question", "response", + + /*This is ok to translate if nobody changes the (a/c) option. + * Should we proceed with this translation */ + response = generic_interrupt(_("Question"), _("response"), NULL, - "Do you want to abort " \ - "or continue (a/c)?", + _("Do you want to abort " \ + "or continue (a/c)?"), "ac"); if (response == 'a') { ret = 0; *setonabort = 1; break; } - printf("Continuing.\n"); + printf(_("Continuing.\n")); } else if(tolower(response) == 'y') { ret = 1; break; @@ -2097,7 +2104,7 @@ static int __attribute__((format(printf, 3, 4))) gfs2_query(int *setonabort, ret = 0; break; } else { - printf("Bad response %d, please type 'y' or 'n'.\n", + printf(_("Bad response %d, please type 'y' or 'n'.\n"), response); } } @@ -2131,9 +2138,9 @@ int main(int argc, char **argv) give_warning(); if (!gfs2_query(&do_abort, &opts, - "Convert %s from GFS1 to GFS2? (y/n)", + _("Convert %s from GFS1 to GFS2? (y/n)"), device)) { - log_crit("%s not converted.\n", device); + log_crit(_("%s not converted.\n"), device); close(sb2.device_fd); exit(0); } @@ -2142,12 +2149,12 @@ int main(int argc, char **argv) /* Convert incore gfs1 sb to gfs2 sb */ /* ---------------------------------------------- */ if (!error) { - log_notice("Converting resource groups."); + log_notice(_("Converting resource groups.")); fflush(stdout); error = convert_rgs(&sb2); log_notice("\n"); if (error) - log_crit("%s: Unable to convert resource groups.\n", + log_crit(_("%s: Unable to convert resource groups.\n"), device); fsync(sb2.device_fd); /* write the buffers to disk */ } @@ -2155,10 +2162,11 @@ int main(int argc, char **argv) /* Renumber the inodes consecutively. */ /* ---------------------------------------------- */ if (!error) { + /* Add a string notifying inode converstion start? */ error = inode_renumber(&sb2, sb2.sd_sb.sb_root_dir.no_addr, (osi_list_t *)&cdpns_to_fix); if (error) - log_crit("\n%s: Error renumbering inodes.\n", device); + log_crit(_("\n%s: Error renumbering inodes.\n"), device); fsync(sb2.device_fd); /* write the buffers to disk */ } /* ---------------------------------------------- */ @@ -2166,32 +2174,32 @@ int main(int argc, char **argv) /* ---------------------------------------------- */ if (!error) { error = fix_directory_info(&sb2, (osi_list_t *)&dirs_to_fix); - log_notice("\r%llu directories, %llu dirents fixed.", + log_notice(_("\r%llu directories, %llu dirents fixed."), (unsigned long long)dirs_fixed, (unsigned long long)dirents_fixed); fflush(stdout); if (error) - log_crit("\n%s: Error fixing directories.\n", device); + log_crit(_("\n%s: Error fixing directories.\n"), device); } /* ---------------------------------------------- */ /* Convert cdpn symlinks to empty dirs */ /* ---------------------------------------------- */ if (!error) { error = fix_cdpn_symlinks(&sb2, (osi_list_t *)&cdpns_to_fix); - log_notice("\r%llu cdpn symlinks moved to empty directories.", + log_notice(_("\r%llu cdpn symlinks moved to empty directories."), (unsigned long long)cdpns_fixed); fflush(stdout); if (error) - log_crit("\n%s: Error fixing cdpn symlinks.\n", device); + log_crit(_("\n%s: Error fixing cdpn symlinks.\n"), device); } /* ---------------------------------------------- */ /* Convert journal space to rg space */ /* ---------------------------------------------- */ if (!error) { - log_notice("\nConverting journals.\n"); + log_notice(_("\nConverting journals.\n")); error = journ_space_to_rg(&sb2); if (error) - log_crit("%s: Error converting journal space.\n", device); + log_crit(_("%s: Error converting journal space.\n"), device); fsync(sb2.device_fd); /* write the buffers to disk */ } /* ---------------------------------------------- */ @@ -2201,7 +2209,7 @@ int main(int argc, char **argv) int jreduce = 0; /* Now we've got to treat it as a gfs2 file system */ if (compute_constants(&sb2)) { - log_crit("Error: Bad constants (1)\n"); + log_crit(_("Error: Bad constants (1)\n")); exit(-1); } @@ -2212,36 +2220,36 @@ int main(int argc, char **argv) jreduce = 1; } if (jreduce) - log_notice("Reduced journal size to %u MB to accommodate " - "GFS2 file system structures.\n", sb2.jsize); + log_notice(_("Reduced journal size to %u MB to accommodate " + "GFS2 file system structures.\n"), sb2.jsize); /* Build the master subdirectory. */ build_master(&sb2); /* Does not do inode_put */ sb2.sd_sb.sb_master_dir = sb2.master_dir->i_di.di_num; /* Build empty journal index file. */ error = conv_build_jindex(&sb2); if (error) { - log_crit("Error: could not build jindex: %s\n", strerror(error)); + log_crit(_("Error: could not build jindex: %s\n"), strerror(error)); exit(-1); } - log_notice("Building GFS2 file system structures.\n"); + log_notice(_("Building GFS2 file system structures.\n")); /* Build the per-node directories */ error = build_per_node(&sb2); if (error) { - log_crit("Error building per-node directories: %s\n", + log_crit(_("Error building per-node directories: %s\n"), strerror(error)); exit(-1); } /* Create the empty inode number file */ error = build_inum(&sb2); /* Does not do inode_put */ if (error) { - log_crit("Error building inum inode: %s\n", + log_crit(_("Error building inum inode: %s\n"), strerror(error)); exit(-1); } /* Create the statfs file */ error = build_statfs(&sb2); /* Does not do inode_put */ if (error) { - log_crit("Error building statfs inode: %s\n", + log_crit(_("Error building statfs inode: %s\n"), strerror(error)); exit(-1); } @@ -2249,14 +2257,14 @@ int main(int argc, char **argv) /* Create the resource group index file */ error = build_rindex(&sb2); if (error) { - log_crit("Error building rindex inode: %s\n", + log_crit(_("Error building rindex inode: %s\n"), strerror(error)); exit(-1); } /* Create the quota file */ error = build_quota(&sb2); if (error) { - log_crit("Error building quota inode: %s\n", + log_crit(_("Error building quota inode: %s\n"), strerror(error)); exit(-1); } @@ -2284,7 +2292,7 @@ int main(int argc, char **argv) /* Now free all the in memory */ gfs2_rgrp_free(&sb2.rglist); - log_notice("Committing changes to disk.\n"); + log_notice(_("Committing changes to disk.\n")); fflush(stdout); /* Set filesystem type in superblock to gfs2. We do this at the */ /* end because if the tool is interrupted in the middle, we want */ @@ -2300,7 +2308,7 @@ int main(int argc, char **argv) if (error) perror(device); else - log_notice("%s: filesystem converted successfully to gfs2.\n", + log_notice(_("%s: filesystem converted successfully to gfs2.\n"), device); } close(sb2.device_fd); -- 1.7.5.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Cluster-devel] [PATCH 2/3] gfs2_convert: set translatable strings 2011-07-05 14:41 ` [Cluster-devel] [PATCH 2/3] gfs2_convert: set translatable strings Carlos Maiolino @ 2011-07-05 14:56 ` Steven Whitehouse 0 siblings, 0 replies; 6+ messages in thread From: Steven Whitehouse @ 2011-07-05 14:56 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, On Tue, 2011-07-05 at 11:41 -0300, Carlos Maiolino wrote: > This patch modify the strings of gfs2_convert to be > able to receive translations. > --- > gfs2/convert/gfs2_convert.c | 206 ++++++++++++++++++++++--------------------- > 1 files changed, 107 insertions(+), 99 deletions(-) > > diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c > index b47bbb7..7f6135f 100644 > --- a/gfs2/convert/gfs2_convert.c > +++ b/gfs2/convert/gfs2_convert.c > @@ -541,15 +541,15 @@ static int get_inode_metablocks(struct gfs2_sbd *sbp, struct gfs2_inode *ip, str > /* Add dinode block to the list */ > blk = malloc(sizeof(struct blocklist)); > if (!blk) { > - log_crit("Error: Can't allocate memory for indirect block fix\n"); > + log_crit(_("Error: Can't allocate memory for indirect block fix\n")); > return -1; > } This is ok for now, but we should replace messages like this with a call to strerror in the future, since that is already translated for us. Also we should be recording the position in the code with a file/line number so that we can then use the same message in all "out of memory" situations. > memset(blk, 0, sizeof(*blk)); > blk->block = dibh->b_blocknr; > blk->ptrbuf = malloc(bufsize); > if (!blk->ptrbuf) { > - log_crit("Error: Can't allocate memory" > - " for file conversion.\n"); > + log_crit(_("Error: Can't allocate memory" > + " for file conversion.\n")); > free(blk); > return -1; > } > @@ -576,13 +576,14 @@ static int get_inode_metablocks(struct gfs2_sbd *sbp, struct gfs2_inode *ip, str > > newblk = malloc(sizeof(struct blocklist)); > if (!newblk) { > - log_crit("Error: Can't allocate memory for indirect block fix.\n"); > + log_crit(_("Error: Can't allocate memory for indirect block fix.\n")); > return -1; > } > memset(newblk, 0, sizeof(*newblk)); > newblk->ptrbuf = malloc(bufsize); > if (!newblk->ptrbuf) { > - log_crit("Error: Can't allocate memory for file conversion.\n"); > + /* FIXME: This message should be different, to not conflit with the above file conversion */ > + log_crit(_("Error: Can't allocate memory for file conversion.\n")); > free(newblk); > return -1; > } > @@ -655,6 +656,7 @@ static int fix_ind_jdata(struct gfs2_sbd *sbp, struct gfs2_inode *ip, uint32_t d > uint32_t gfs2_hgt, uint64_t dinode_size, struct blocklist *blk, > struct blocklist *blocks) > { > + /*FIXME: Messages here should be different, to not conflit with messages in get_inode_metablocks */ > struct blocklist *newblk; > unsigned int len, bufsize; > uint64_t *ptr1, block; > @@ -675,13 +677,13 @@ static int fix_ind_jdata(struct gfs2_sbd *sbp, struct gfs2_inode *ip, uint32_t d > > newblk = malloc(sizeof(struct blocklist)); > if (!newblk) { > - log_crit("Error: Can't allocate memory for indirect block fix.\n"); > + log_crit(_("Error: Can't allocate memory for indirect block fix.\n")); > return -1; > } > memset(newblk, 0, sizeof(*newblk)); > newblk->ptrbuf = malloc(bufsize); > if (!newblk->ptrbuf) { > - log_crit("Error: Can't allocate memory for file conversion.\n"); > + log_crit(_("Error: Can't allocate memory for file conversion.\n")); > free(newblk); > return -1; > } > @@ -821,7 +823,7 @@ static int fix_cdpn_symlink(struct gfs2_sbd *sbp, struct gfs2_buffer_head *bh, s > /* Save the symlink di_addr. We'll find the parent di_addr later */ > fix = malloc(sizeof(struct inode_dir_block)); > if (!fix) { > - log_crit("Error: out of memory.\n"); > + log_crit(_("Error: out of memory.\n")); > return -1; > } > memset(fix, 0, sizeof(struct inode_dir_block)); > @@ -855,7 +857,8 @@ static int fix_xattr(struct gfs2_sbd *sbp, struct gfs2_buffer_head *bh, struct g > len = sbp->bsize - sizeof(struct gfs_indirect); > buf = malloc(len); > if (!buf) { > - log_crit("Error: out of memory.\n"); > + /*FIXME: Same message as fix_cdpn_symlink */ > + log_crit(_("Error: out of memory.\n")); > return -1; > } > old_hdr_sz = sizeof(struct gfs_indirect); > @@ -896,7 +899,8 @@ static int adjust_inode(struct gfs2_sbd *sbp, struct gfs2_buffer_head *bh) > /* Add this directory to the list of dirs to fix later. */ > fixdir = malloc(sizeof(struct inode_block)); > if (!fixdir) { > - log_crit("Error: out of memory.\n"); > + /*FIXME: Same message as fix_cdpn_symlink */ > + log_crit(_("Error: out of memory.\n")); > return -1; > } > memset(fixdir, 0, sizeof(struct inode_block)); > @@ -990,7 +994,7 @@ static int inode_renumber(struct gfs2_sbd *sbp, uint64_t root_inode_addr, osi_li > int error = 0; > int rgs_processed = 0; > > - log_notice("Converting inodes.\n"); > + log_notice(_("Converting inodes.\n")); > sbp->md.next_inum = 1; /* starting inode numbering */ > gettimeofday(&tv, NULL); > seconds = tv.tv_sec; > @@ -1008,7 +1012,7 @@ static int inode_renumber(struct gfs2_sbd *sbp, uint64_t root_inode_addr, osi_li > /* doesn't think we hung. (This may take a long time). */ > if (tv.tv_sec - seconds) { > seconds = tv.tv_sec; > - log_notice("\r%llu inodes from %d rgs converted.", > + log_notice(_("\r%llu inodes from %d rgs converted."), We shouldn't be adding \r into messages as that will be flagged up when the strings are generated, and formatting is, in general, not translatable. > (unsigned long long)sbp->md.next_inum, > rgs_processed); > fflush(stdout); > @@ -1063,7 +1067,7 @@ static int inode_renumber(struct gfs2_sbd *sbp, uint64_t root_inode_addr, osi_li > first = 0; > } /* while 1 */ > } /* for all rgs */ > - log_notice("\r%llu inodes from %d rgs converted.", > + log_notice(_("\r%llu inodes from %d rgs converted."), > (unsigned long long)sbp->md.next_inum, rgs_processed); > fflush(stdout); > return 0; > @@ -1104,7 +1108,7 @@ static int process_dirent_info(struct gfs2_inode *dip, struct gfs2_sbd *sbp, > > error = gfs2_dirent_first(dip, bh, &dent); > if (error != IS_LEAF && error != IS_DINODE) { > - log_crit("Error retrieving directory.\n"); > + log_crit(_("Error retrieving directory.\n")); > return -1; > } > error = 0; > @@ -1129,7 +1133,7 @@ static int process_dirent_info(struct gfs2_inode *dip, struct gfs2_sbd *sbp, > dirents_fixed++; > if (tv.tv_sec - seconds) { > seconds = tv.tv_sec; > - log_notice("\r%llu directories, %llu dirents fixed.", > + log_notice(_("\r%llu directories, %llu dirents fixed."), > (unsigned long long)dirs_fixed, > (unsigned long long)dirents_fixed); > fflush(stdout); > @@ -1140,7 +1144,7 @@ static int process_dirent_info(struct gfs2_inode *dip, struct gfs2_sbd *sbp, > if (inum.no_formal_ino) { /* if not a sentinel (placeholder) */ > error = fetch_inum(sbp, inum.no_addr, &inum, NULL); > if (error) { > - log_crit("Error retrieving inode 0x%llx\n", > + log_crit(_("Error retrieving inode 0x%llx\n"), > (unsigned long long)inum.no_addr); > break; > } > @@ -1234,7 +1238,7 @@ static int fix_one_directory_exhash(struct gfs2_sbd *sbp, struct gfs2_inode *dip > if (!error) /* end of file */ > return 0; /* success */ > else if (error != sizeof(uint64_t)) { > - log_crit("fix_one_directory_exhash: error reading directory.\n"); > + log_crit(_("fix_one_directory_exhash: error reading directory.\n")); > return -1; > } > else { > @@ -1250,7 +1254,7 @@ static int fix_one_directory_exhash(struct gfs2_sbd *sbp, struct gfs2_inode *dip > /* read the leaf buffer in */ > error = gfs2_get_leaf(dip, leaf_block, &bh_leaf); > if (error) { > - log_crit("Error reading leaf %llx\n", > + log_crit(_("Error reading leaf %llx\n"), > (unsigned long long)leaf_block); > break; > } > @@ -1278,14 +1282,14 @@ static int process_directory(struct gfs2_sbd *sbp, uint64_t dirblock, uint64_t d > /* fix the directory: either exhash (leaves) or linear (stuffed) */ > if (dip->i_di.di_flags & GFS2_DIF_EXHASH) { > if (fix_one_directory_exhash(sbp, dip, dentmod)) { > - log_crit("Error fixing exhash directory.\n"); > + log_crit(_("Error fixing exhash directory.\n")); > inode_put(&dip); > return -1; > } > } else { > error = process_dirent_info(dip, sbp, dip->i_bh, dip->i_di.di_entries, dentmod); > if (error && error != -EISDIR) { > - log_crit("Error fixing linear directory.\n"); > + log_crit(_("Error fixing linear directory.\n")); > inode_put(&dip); > return -1; > } > @@ -1312,7 +1316,7 @@ static int fix_directory_info(struct gfs2_sbd *sbp, osi_list_t *dir_to_fix) > dirents_fixed = 0; > gettimeofday(&tv, NULL); > seconds = tv.tv_sec; > - log_notice("\nFixing file and directory information.\n"); > + log_notice(_("\nFixing file and directory information.\n")); > fflush(stdout); > tmp = NULL; > /* for every directory in the list */ > @@ -1327,7 +1331,7 @@ static int fix_directory_info(struct gfs2_sbd *sbp, osi_list_t *dir_to_fix) > dir_iblk = (struct inode_block *)fix; > dirblock = dir_iblk->di_addr; /* addr of dir inode */ > if (process_directory(sbp, dirblock, 0)) { > - log_crit("Error processing directory\n"); > + log_crit(_("Error processing directory\n")); > return -1; > } > } > @@ -1363,13 +1367,13 @@ static int fix_cdpn_symlinks(struct gfs2_sbd *sbp, osi_list_t *cdpn_to_fix) > /* convert symlink to empty dir */ > error = fetch_inum(sbp, l_fix->di_addr, &fix, &eablk); > if (error) { > - log_crit("Error retrieving inode at block %llx\n", > + log_crit(_("Error retrieving inode at block %llx\n"), > (unsigned long long)l_fix->di_addr); > break; > } > error = fetch_inum(sbp, l_fix->di_paddr, &dir, NULL); > if (error) { > - log_crit("Error retrieving inode at block %llx\n", > + log_crit(_("Error retrieving inode at block %llx\n"), > (unsigned long long)l_fix->di_paddr); > break; > } > @@ -1385,7 +1389,7 @@ static int fix_cdpn_symlinks(struct gfs2_sbd *sbp, osi_list_t *cdpn_to_fix) > /* fix the parent directory dirent entry for this inode */ > error = process_directory(sbp, l_fix->di_paddr, l_fix->di_addr); > if (error) { > - log_crit("Error trying to fix cdpn dentry\n"); > + log_crit(_("Error trying to fix cdpn dentry\n")); > break; > } > free(l_fix); > @@ -1419,17 +1423,17 @@ static int read_gfs1_jiindex(struct gfs2_sbd *sdp) > unsigned int tmp_mode = 0; > > if(ip->i_di.di_size % sizeof(struct gfs1_jindex) != 0){ > - log_crit("The size reported in the journal index" > + log_crit(_("The size reported in the journal index" > " inode is not a\n" > - "\tmultiple of the size of a journal index.\n"); > + "\tmultiple of the size of a journal index.\n")); > return -1; > } > if(!(sd_jindex = (struct gfs1_jindex *)malloc(ip->i_di.di_size))) { > - log_crit("Unable to allocate journal index\n"); > + log_crit(_("Unable to allocate journal index\n")); > return -1; > } > if(!memset(sd_jindex, 0, ip->i_di.di_size)) { > - log_crit("Unable to zero journal index\n"); > + log_crit(_("Unable to zero journal index\n")); > return -1; > } > /* ugly hack > @@ -1448,8 +1452,8 @@ static int read_gfs1_jiindex(struct gfs2_sbd *sdp) > if(!error) > break; > if (error != sizeof(struct gfs1_jindex)){ > - log_crit("An error occurred while reading the" > - " journal index file.\n"); > + log_crit(_("An error occurred while reading the" > + " journal index file.\n")); > goto fail; > } > journ = sd_jindex + j; > @@ -1458,7 +1462,7 @@ static int read_gfs1_jiindex(struct gfs2_sbd *sdp) > } > ip->i_di.di_mode = tmp_mode; > if(j * sizeof(struct gfs1_jindex) != ip->i_di.di_size){ > - log_crit("journal inode size invalid\n"); > + log_crit(_("journal inode size invalid\n")); > goto fail; > } > sdp->md.journals = sdp->orig_journals = j; > @@ -1507,7 +1511,7 @@ static int init(struct gfs2_sbd *sbp) > sbp->bsize = sbp->sd_sb.sb_bsize; > osi_list_init(&sbp->rglist); > if (compute_constants(sbp)) { > - log_crit("Error: Bad constants (1)\n"); > + log_crit(_("Error: Bad constants (1)\n")); > exit(-1); > } > > @@ -1529,13 +1533,13 @@ static int init(struct gfs2_sbd *sbp) > brelse(bh); > if (compute_heightsize(sbp, sbp->sd_heightsize, &sbp->sd_max_height, > sbp->bsize, sbp->sd_diptrs, sbp->sd_inptrs)) { > - log_crit("Error: Bad constants (1)\n"); > + log_crit(_("Error: Bad constants (1)\n")); > exit(-1); > } > > if (compute_heightsize(sbp, sbp->sd_jheightsize, &sbp->sd_max_jheight, > sbp->sd_jbsize, sbp->sd_diptrs, sbp->sd_inptrs)) { > - log_crit("Error: Bad constants (1)\n"); > + log_crit(_("Error: Bad constants (1)\n")); > exit(-1); > } > /* -------------------------------------------------------- */ > @@ -1546,13 +1550,13 @@ static int init(struct gfs2_sbd *sbp) > memset(gfs2_heightsize, 0, sizeof(gfs2_heightsize)); > if (compute_heightsize(sbp, gfs2_heightsize, &gfs2_max_height, > sbp->bsize, sbp->sd_diptrs, gfs2_inptrs)) { > - log_crit("Error: Bad constants (1)\n"); > + log_crit(_("Error: Bad constants (1)\n")); > exit(-1); > } > memset(gfs2_jheightsize, 0, sizeof(gfs2_jheightsize)); > if (compute_heightsize(sbp, gfs2_jheightsize, &gfs2_max_jheight, > sbp->sd_jbsize, sbp->sd_diptrs, gfs2_inptrs)) { > - log_crit("Error: Bad constants (1)\n"); > + log_crit(_("Error: Bad constants (1)\n")); > exit(-1); > } > > @@ -1563,7 +1567,7 @@ static int init(struct gfs2_sbd *sbp) > sbp->sd_sb.sb_header.mh_type != GFS_METATYPE_SB || > sbp->sd_sb.sb_header.mh_format != GFS_FORMAT_SB || > sbp->sd_sb.sb_multihost_format != GFS_FORMAT_MULTI) { > - log_crit("Error: %s does not look like a gfs1 filesystem.\n", > + log_crit(_("Error: %s does not look like a gfs1 filesystem.\n"), > device); > close(sbp->device_fd); > exit(-1); > @@ -1585,16 +1589,16 @@ static int init(struct gfs2_sbd *sbp) > /* look like a directory, temporarily. */ > sbp->md.riinode->i_di.di_mode &= ~S_IFMT; > sbp->md.riinode->i_di.di_mode |= S_IFDIR; > - printf("Examining file system"); > + printf(_("Examining file system")); > if (gfs1_ri_update(sbp, 0, &rgcount, 0)){ > - log_crit("Unable to fill in resource group information.\n"); > + log_crit(_("Unable to fill in resource group information.\n")); > return -1; > } > printf("\n"); > fflush(stdout); > inode_put(&sbp->md.riinode); > inode_put(&sbp->md.jiinode); > - log_debug("%d rgs found.\n", rgcount); > + log_debug(_("%d rgs found.\n"), rgcount); > return 0; > }/* fill_super_block */ > > @@ -1603,14 +1607,14 @@ static int init(struct gfs2_sbd *sbp) > /* ------------------------------------------------------------------------- */ > static void give_warning(void) > { > - printf("This program will convert a gfs1 filesystem to a " \ > - "gfs2 filesystem.\n"); > - printf("WARNING: This can't be undone. It is strongly advised " \ > - "that you:\n\n"); > - printf(" 1. Back up your entire filesystem first.\n"); > - printf(" 2. Run gfs_fsck first to ensure filesystem integrity.\n"); > - printf(" 3. Make sure the filesystem is NOT mounted from any node.\n"); > - printf(" 4. Make sure you have the latest software versions.\n"); > + printf(_("This program will convert a gfs1 filesystem to a " \ > + "gfs2 filesystem.\n")); > + printf(_("WARNING: This can't be undone. It is strongly advised " \ > + "that you:\n\n")); > + printf(_(" 1. Back up your entire filesystem first.\n")); > + printf(_(" 2. Run gfs_fsck first to ensure filesystem integrity.\n")); > + printf(_(" 3. Make sure the filesystem is NOT mounted from any node.\n")); > + printf(_(" 4. Make sure you have the latest software versions.\n")); This can all be one big multiline string. It will make it easier to translate. Using \n is ok, even if \r is not. > }/* give_warning */ > > /* ------------------------------------------------------------------------- */ > @@ -1618,7 +1622,7 @@ static void give_warning(void) > /* ------------------------------------------------------------------------- */ > static void version(void) > { > - log_notice("gfs2_convert version %s (built %s %s)\n", VERSION, > + log_notice(_("gfs2_convert version %s (built %s %s)\n"), VERSION, > __DATE__, __TIME__); > log_notice("%s\n\n", REDHAT_COPYRIGHT); > } > @@ -1629,15 +1633,15 @@ static void version(void) > static void usage(const char *name) > { > give_warning(); > - printf("\nUsage:\n"); > - printf("%s [-hnqvVy] <device>\n\n", name); > + printf(_("\nUsage:\n")); > + printf(_("%s [-hnqvVy] <device>\n\n"), name); > printf("Flags:\n"); > - printf("\th - print this help message\n"); > - printf("\tn - assume 'no' to all questions\n"); > - printf("\tq - quieter output\n"); > - printf("\tv - more verbose output\n"); > - printf("\tV - print version information\n"); > - printf("\ty - assume 'yes' to all questions\n"); > + printf(_("\th - print this help message\n")); > + printf(_("\tn - assume 'no' to all questions\n")); > + printf(_("\tq - quieter output\n")); > + printf(_("\tv - more verbose output\n")); > + printf(_("\tV - print version information\n")); > + printf(_("\ty - assume 'yes' to all questions\n")); > }/* usage */ Likewise, this can also be a single string. > > /* ------------------------------------------------------------------------- */ > @@ -1677,7 +1681,7 @@ static void process_parameters(int argc, char **argv, struct gfs2_options *opts) > opts->yes = 1; > break; > default: > - fprintf(stderr,"Parameter not understood: %c\n", c); > + fprintf(stderr,_("Parameter not understood: %c\n"), c); > usage(argv[0]); > exit(0); > } > @@ -1686,11 +1690,11 @@ static void process_parameters(int argc, char **argv, struct gfs2_options *opts) > strcpy(device, argv[optind]); > opts->device = device; > if(!opts->device) { > - fprintf(stderr, "Please use '-h' for usage.\n"); > + fprintf(stderr, _("Please use '-h' for usage.\n")); > exit(1); > } > } else { > - fprintf(stderr, "No device specified. Use '-h' for usage.\n"); > + fprintf(stderr, _("No device specified. Use '-h' for usage.\n")); > exit(1); > } > } /* process_parameters */ > @@ -1740,7 +1744,7 @@ static int journ_space_to_rg(struct gfs2_sbd *sdp) > mh.mh_magic = GFS2_MAGIC; > mh.mh_type = GFS2_METATYPE_RB; > mh.mh_format = GFS2_FORMAT_RB; > - log_notice("Converting journal space to rg space.\n"); > + log_notice(_("Converting journal space to rg space.\n")); > /* Go through each journal, converting them one by one */ > for (j = 0; j < sdp->orig_journals; j++) { /* for each journal */ > uint64_t size; > @@ -1760,18 +1764,18 @@ static int journ_space_to_rg(struct gfs2_sbd *sdp) > (rgd->ri.ri_addr > rgdhigh->ri.ri_addr))) > rgdhigh = rgd; > } /* for each rg */ > - log_info("Addr 0x%llx comes after rg at addr 0x%llx\n", > + log_info(_("Addr 0x%llx comes after rg at addr 0x%llx\n"), > (unsigned long long)jndx->ji_addr, > (unsigned long long)rgdhigh->ri.ri_addr); > if (!rgdhigh) { /* if we somehow didn't find one. */ > - log_crit("Error: No suitable rg found for journal.\n"); > + log_crit(_("Error: No suitable rg found for journal.\n")); > return -1; > } > /* Allocate a new rgd entry which includes rg and ri. */ > /* convert the gfs1 rgrp into a new gfs2 rgrp */ > rgd = malloc(sizeof(struct rgrp_list)); > if (!rgd) { > - log_crit("Error: unable to allocate memory for rg conversion.\n"); > + log_crit(_("Error: unable to allocate memory for rg conversion.\n")); > return -1; > } > memset(rgd, 0, sizeof(struct rgrp_list)); > @@ -1808,7 +1812,7 @@ static int journ_space_to_rg(struct gfs2_sbd *sdp) > memset(rgd->bh[x]->b_data, 0, sdp->bsize); > } > if (gfs2_compute_bitstructs(sdp, rgd)) { > - log_crit("gfs2_convert: Error converting bitmaps.\n"); > + log_crit(_("gfs2_convert: Error converting bitmaps.\n")); > exit(-1); > } > convert_bitmaps(sdp, rgd); > @@ -1839,7 +1843,7 @@ static void update_inode_file(struct gfs2_sbd *sdp) > if (count != sizeof(uint64_t)) > die("update_inode_file\n"); > > - log_debug("\nNext Inum: %llu\n", (unsigned long long)sdp->md.next_inum); > + log_debug(_("\nNext Inum: %llu\n"), (unsigned long long)sdp->md.next_inum); > }/* update_inode_file */ > > /* ------------------------------------------------------------------------- */ > @@ -1869,7 +1873,7 @@ static void remove_obsolete_gfs1(struct gfs2_sbd *sbp) > { > struct gfs2_inum inum; > > - log_notice("Removing obsolete GFS1 file system structures.\n"); > + log_notice(_("Removing obsolete GFS1 file system structures.\n")); > fflush(stdout); > /* Delete the old gfs1 Journal index: */ > gfs2_inum_in(&inum, (char *)&raw_gfs1_ondisk_sb.sb_jindex_di); > @@ -1906,7 +1910,7 @@ static int conv_build_jindex(struct gfs2_sbd *sdp) > for (j = 0; j < sdp->md.journals; j++) { > char name[256]; > > - printf("Writing journal #%d...", j + 1); > + printf(_("Writing journal #%d..."), j + 1); > fflush(stdout); > sprintf(name, "journal%u", j); > sdp->md.journal[j] = createi(sdp->md.jiinode, name, S_IFREG | > @@ -1914,7 +1918,7 @@ static int conv_build_jindex(struct gfs2_sbd *sdp) > write_journal(sdp, j, > sdp->jsize << 20 >> sdp->sd_sb.sb_bsize_shift); > inode_put(&sdp->md.journal[j]); > - printf("done.\n"); > + printf(_("done.\n")); > fflush(stdout); > } > > @@ -2032,7 +2036,7 @@ static void copy_quotas(struct gfs2_sbd *sdp) > > err = gfs2_lookupi(sdp->master_dir, "quota", 5, &nq_ip); > if (err) > - die("Couldn't lookup new quota file: %d\n", err); > + die(_("Couldn't lookup new quota file: %d\n"), err); > > gfs2_inum_in(&inum, (char *)&raw_gfs1_ondisk_sb.sb_quota_di); > oq_ip = inode_read(sdp, inum.no_addr); > @@ -2079,17 +2083,20 @@ static int __attribute__((format(printf, 3, 4))) gfs2_query(int *setonabort, > printf("\n"); > fflush(NULL); > if (response == 0x3) { /* if interrupted, by ctrl-c */ > - response = generic_interrupt("Question", "response", > + > + /*This is ok to translate if nobody changes the (a/c) option. > + * Should we proceed with this translation */ > + response = generic_interrupt(_("Question"), _("response"), > NULL, > - "Do you want to abort " \ > - "or continue (a/c)?", > + _("Do you want to abort " \ > + "or continue (a/c)?"), > "ac"); Again on a longer term basis, this needs to be fixed up so that the question can be translated and we can parse the response even if the translation doesn't use a/c. The glibc messages stuff can help here I suspect. > if (response == 'a') { > ret = 0; > *setonabort = 1; > break; > } > - printf("Continuing.\n"); > + printf(_("Continuing.\n")); > } else if(tolower(response) == 'y') { > ret = 1; > break; > @@ -2097,7 +2104,7 @@ static int __attribute__((format(printf, 3, 4))) gfs2_query(int *setonabort, > ret = 0; > break; > } else { > - printf("Bad response %d, please type 'y' or 'n'.\n", > + printf(_("Bad response %d, please type 'y' or 'n'.\n"), > response); > } > } > @@ -2131,9 +2138,9 @@ int main(int argc, char **argv) > > give_warning(); > if (!gfs2_query(&do_abort, &opts, > - "Convert %s from GFS1 to GFS2? (y/n)", > + _("Convert %s from GFS1 to GFS2? (y/n)"), > device)) { > - log_crit("%s not converted.\n", device); > + log_crit(_("%s not converted.\n"), device); > close(sb2.device_fd); > exit(0); > } > @@ -2142,12 +2149,12 @@ int main(int argc, char **argv) > /* Convert incore gfs1 sb to gfs2 sb */ > /* ---------------------------------------------- */ > if (!error) { > - log_notice("Converting resource groups."); > + log_notice(_("Converting resource groups.")); > fflush(stdout); > error = convert_rgs(&sb2); > log_notice("\n"); > if (error) > - log_crit("%s: Unable to convert resource groups.\n", > + log_crit(_("%s: Unable to convert resource groups.\n"), > device); > fsync(sb2.device_fd); /* write the buffers to disk */ > } > @@ -2155,10 +2162,11 @@ int main(int argc, char **argv) > /* Renumber the inodes consecutively. */ > /* ---------------------------------------------- */ > if (!error) { > + /* Add a string notifying inode converstion start? */ > error = inode_renumber(&sb2, sb2.sd_sb.sb_root_dir.no_addr, > (osi_list_t *)&cdpns_to_fix); > if (error) > - log_crit("\n%s: Error renumbering inodes.\n", device); > + log_crit(_("\n%s: Error renumbering inodes.\n"), device); > fsync(sb2.device_fd); /* write the buffers to disk */ > } > /* ---------------------------------------------- */ > @@ -2166,32 +2174,32 @@ int main(int argc, char **argv) > /* ---------------------------------------------- */ > if (!error) { > error = fix_directory_info(&sb2, (osi_list_t *)&dirs_to_fix); > - log_notice("\r%llu directories, %llu dirents fixed.", > + log_notice(_("\r%llu directories, %llu dirents fixed."), > (unsigned long long)dirs_fixed, > (unsigned long long)dirents_fixed); > fflush(stdout); > if (error) > - log_crit("\n%s: Error fixing directories.\n", device); > + log_crit(_("\n%s: Error fixing directories.\n"), device); > } > /* ---------------------------------------------- */ > /* Convert cdpn symlinks to empty dirs */ > /* ---------------------------------------------- */ > if (!error) { > error = fix_cdpn_symlinks(&sb2, (osi_list_t *)&cdpns_to_fix); > - log_notice("\r%llu cdpn symlinks moved to empty directories.", > + log_notice(_("\r%llu cdpn symlinks moved to empty directories."), > (unsigned long long)cdpns_fixed); > fflush(stdout); > if (error) > - log_crit("\n%s: Error fixing cdpn symlinks.\n", device); > + log_crit(_("\n%s: Error fixing cdpn symlinks.\n"), device); > } > /* ---------------------------------------------- */ > /* Convert journal space to rg space */ > /* ---------------------------------------------- */ > if (!error) { > - log_notice("\nConverting journals.\n"); > + log_notice(_("\nConverting journals.\n")); > error = journ_space_to_rg(&sb2); > if (error) > - log_crit("%s: Error converting journal space.\n", device); > + log_crit(_("%s: Error converting journal space.\n"), device); > fsync(sb2.device_fd); /* write the buffers to disk */ > } > /* ---------------------------------------------- */ > @@ -2201,7 +2209,7 @@ int main(int argc, char **argv) > int jreduce = 0; > /* Now we've got to treat it as a gfs2 file system */ > if (compute_constants(&sb2)) { > - log_crit("Error: Bad constants (1)\n"); > + log_crit(_("Error: Bad constants (1)\n")); > exit(-1); > } > > @@ -2212,36 +2220,36 @@ int main(int argc, char **argv) > jreduce = 1; > } > if (jreduce) > - log_notice("Reduced journal size to %u MB to accommodate " > - "GFS2 file system structures.\n", sb2.jsize); > + log_notice(_("Reduced journal size to %u MB to accommodate " > + "GFS2 file system structures.\n"), sb2.jsize); > /* Build the master subdirectory. */ > build_master(&sb2); /* Does not do inode_put */ > sb2.sd_sb.sb_master_dir = sb2.master_dir->i_di.di_num; > /* Build empty journal index file. */ > error = conv_build_jindex(&sb2); > if (error) { > - log_crit("Error: could not build jindex: %s\n", strerror(error)); > + log_crit(_("Error: could not build jindex: %s\n"), strerror(error)); > exit(-1); > } > - log_notice("Building GFS2 file system structures.\n"); > + log_notice(_("Building GFS2 file system structures.\n")); > /* Build the per-node directories */ > error = build_per_node(&sb2); > if (error) { > - log_crit("Error building per-node directories: %s\n", > + log_crit(_("Error building per-node directories: %s\n"), > strerror(error)); > exit(-1); > } > /* Create the empty inode number file */ > error = build_inum(&sb2); /* Does not do inode_put */ > if (error) { > - log_crit("Error building inum inode: %s\n", > + log_crit(_("Error building inum inode: %s\n"), > strerror(error)); > exit(-1); > } > /* Create the statfs file */ > error = build_statfs(&sb2); /* Does not do inode_put */ > if (error) { > - log_crit("Error building statfs inode: %s\n", > + log_crit(_("Error building statfs inode: %s\n"), > strerror(error)); > exit(-1); > } > @@ -2249,14 +2257,14 @@ int main(int argc, char **argv) > /* Create the resource group index file */ > error = build_rindex(&sb2); > if (error) { > - log_crit("Error building rindex inode: %s\n", > + log_crit(_("Error building rindex inode: %s\n"), > strerror(error)); > exit(-1); > } > /* Create the quota file */ > error = build_quota(&sb2); > if (error) { > - log_crit("Error building quota inode: %s\n", > + log_crit(_("Error building quota inode: %s\n"), > strerror(error)); > exit(-1); > } > @@ -2284,7 +2292,7 @@ int main(int argc, char **argv) > > /* Now free all the in memory */ > gfs2_rgrp_free(&sb2.rglist); > - log_notice("Committing changes to disk.\n"); > + log_notice(_("Committing changes to disk.\n")); > fflush(stdout); > /* Set filesystem type in superblock to gfs2. We do this at the */ > /* end because if the tool is interrupted in the middle, we want */ > @@ -2300,7 +2308,7 @@ int main(int argc, char **argv) > if (error) > perror(device); > else > - log_notice("%s: filesystem converted successfully to gfs2.\n", > + log_notice(_("%s: filesystem converted successfully to gfs2.\n"), > device); > } > close(sb2.device_fd); Otherwise, it all looks good, Steve. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Cluster-devel] [PATCH 3/3] i18n support: Add gfs2_convert to translatable list 2011-07-05 14:41 [Cluster-devel] [PATCH 1/3] gfs2_convert: Add i18n support Carlos Maiolino 2011-07-05 14:41 ` [Cluster-devel] [PATCH 2/3] gfs2_convert: set translatable strings Carlos Maiolino @ 2011-07-05 14:41 ` Carlos Maiolino 2011-07-05 14:56 ` Steven Whitehouse 2011-07-05 14:56 ` [Cluster-devel] [PATCH 1/3] gfs2_convert: Add i18n support Steven Whitehouse 2 siblings, 1 reply; 6+ messages in thread From: Carlos Maiolino @ 2011-07-05 14:41 UTC (permalink / raw) To: cluster-devel.redhat.com Added gfs2_convert files to the translatable files list of the gfs2-utils i18n support --- po/POTFILES.in | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/po/POTFILES.in b/po/POTFILES.in index 88d2198..b7f8269 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -35,3 +35,6 @@ gfs2/mkfs/main_mkfs.c #tune tool gfs2/tune/main.c gfs2/tune/super.c + +#convert tool +gfs2/convert/gfs2_convert.c -- 1.7.5.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Cluster-devel] [PATCH 3/3] i18n support: Add gfs2_convert to translatable list 2011-07-05 14:41 ` [Cluster-devel] [PATCH 3/3] i18n support: Add gfs2_convert to translatable list Carlos Maiolino @ 2011-07-05 14:56 ` Steven Whitehouse 0 siblings, 0 replies; 6+ messages in thread From: Steven Whitehouse @ 2011-07-05 14:56 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, On Tue, 2011-07-05 at 11:41 -0300, Carlos Maiolino wrote: > Added gfs2_convert files to the translatable files list > of the gfs2-utils i18n support > --- > po/POTFILES.in | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/po/POTFILES.in b/po/POTFILES.in > index 88d2198..b7f8269 100644 > --- a/po/POTFILES.in > +++ b/po/POTFILES.in > @@ -35,3 +35,6 @@ gfs2/mkfs/main_mkfs.c > #tune tool > gfs2/tune/main.c > gfs2/tune/super.c > + > +#convert tool > +gfs2/convert/gfs2_convert.c looks good to me, Steve. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Cluster-devel] [PATCH 1/3] gfs2_convert: Add i18n support 2011-07-05 14:41 [Cluster-devel] [PATCH 1/3] gfs2_convert: Add i18n support Carlos Maiolino 2011-07-05 14:41 ` [Cluster-devel] [PATCH 2/3] gfs2_convert: set translatable strings Carlos Maiolino 2011-07-05 14:41 ` [Cluster-devel] [PATCH 3/3] i18n support: Add gfs2_convert to translatable list Carlos Maiolino @ 2011-07-05 14:56 ` Steven Whitehouse 2 siblings, 0 replies; 6+ messages in thread From: Steven Whitehouse @ 2011-07-05 14:56 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, Also looks good, Steve. On Tue, 2011-07-05 at 11:41 -0300, Carlos Maiolino wrote: > Add the headers and macros needed to i18n support into gfs2_convert. > --- > gfs2/convert/gfs2_convert.c | 7 +++++++ > 1 files changed, 7 insertions(+), 0 deletions(-) > > diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c > index 20cca80..b47bbb7 100644 > --- a/gfs2/convert/gfs2_convert.c > +++ b/gfs2/convert/gfs2_convert.c > @@ -23,6 +23,9 @@ > #include <sys/time.h> > #include <errno.h> > #include <ctype.h> > +#include <libintl.h> > +#include <locale.h> > +#define _(String) gettext(String) > > #include <linux/types.h> > #include <linux/gfs2_ondisk.h> > @@ -2112,6 +2115,10 @@ int main(int argc, char **argv) > struct gfs2_buffer_head *bh; > struct gfs2_options opts; > > + /* Set i18n support to gfs2_convert */ > + setlocale(LC_ALL, ""); > + textdomain("gfs2-utils"); > + > version(); > process_parameters(argc, argv, &opts); > error = init(&sb2); ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-07-05 14:56 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-07-05 14:41 [Cluster-devel] [PATCH 1/3] gfs2_convert: Add i18n support Carlos Maiolino 2011-07-05 14:41 ` [Cluster-devel] [PATCH 2/3] gfs2_convert: set translatable strings Carlos Maiolino 2011-07-05 14:56 ` Steven Whitehouse 2011-07-05 14:41 ` [Cluster-devel] [PATCH 3/3] i18n support: Add gfs2_convert to translatable list Carlos Maiolino 2011-07-05 14:56 ` Steven Whitehouse 2011-07-05 14:56 ` [Cluster-devel] [PATCH 1/3] gfs2_convert: Add i18n support Steven Whitehouse
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).