⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mkreiserfs.c

📁 reiserfsprogs-3.6.19.tar.gz 源码 给有需要的人!
💻 C
📖 第 1 页 / 共 2 页
字号:
    }    return;}static void set_hash_function (char * str){    if (!strcmp (str, "tea"))	    Hash = TEA_HASH;    else if (!strcmp (str, "rupasov"))	    Hash = YURA_HASH;    else if (!strcmp (str, "r5"))	    Hash = R5_HASH;    else	    message("wrong hash type specified. Using default");}static void set_reiserfs_version (char * str){    if (!strcmp (str, "3.5"))	    Format = "3.5";    else  {	    Format = "3.6";	    if (strcmp (str, "3.6"))		    message("wrong reiserfs version specified. "			    "Using default 3.6 format");    }}static int str2int (char * str){    int val;    char * tmp;    val = (int) strtol (str, &tmp, 0);        if (*tmp) {	reiserfs_exit (1, "%s: strtol is unable to make an integer of %s\n",		       program_name, str);    }        return val;}static void set_block_size (char * str, int *b_size){    *b_size = str2int (str);          if (!is_blocksize_correct (*b_size))        reiserfs_exit (1, "%s: wrong blocksize %s specified, "		       "only power of 2 from 512-8192 interval "		       "are supported", program_name, str);}static void set_transaction_max_size (char * str){	Max_trans_size = str2int( str );}/* reiserfs_create_journal will check this */static void set_journal_device_size (char * str){    Journal_size = str2int (str);/*    if (Journal_size < JOURNAL_MIN_SIZE)		die ("%s: wrong journal size specified: %lu. Should be at least %u",			 program_name, 			 Journal_size + 1, JOURNAL_MIN_SIZE + 1);*/}/* reiserfs_create_journal will check this */static void set_offset_in_journal_device (char * str){	Offset = str2int( str );}static int is_journal_default (char * name, char * jname, int blocksize){    if (jname && strcmp (name, jname))	return 0;        if (Journal_size && Journal_size != 	journal_default_size(REISERFS_DISK_OFFSET_IN_BYTES / blocksize, 			     blocksize) + 1)	/* journal size is set and it is not default size */	return 0;        if (Max_trans_size && Max_trans_size != JOURNAL_TRANS_MAX)	return 0;    return 1;}			/* if running kernel is 2.2 - mkreiserfs creates 3.5 format, if 2.4 - 3.6,   otherwise - mkreiserfs fails */static int select_format (void){	struct utsname sysinfo;	if (Format) {		if (!strcmp (Format, "3.5"))			return REISERFS_FORMAT_3_5;		if (strcmp (Format, "3.6")) {			message ("Unknown fromat %s specified\n", Format);			exit (1);		}		return REISERFS_FORMAT_3_6;	}		reiserfs_warning (stdout, "Guessing about desired format.. ");		if (uname (&sysinfo) == -1) {		message ("could not get system info: %s", strerror(errno));		exit (1);	}		reiserfs_warning(stdout, "Kernel %s is running.\n", sysinfo.release);		if (strncmp (sysinfo.release, "2.4", 3) >= 0)		return REISERFS_FORMAT_3_6;	if (strncmp (sysinfo.release, "2.2", 3)) {		message( "You should run either 2.2 or 2.4 or higher to be able "		    "to create reiserfs filesystem or specify desired format with --format");		exit (1);	}    reiserfs_warning(stdout, "Creating filesystem of format 3.5\n");    return REISERFS_FORMAT_3_5;}int main (int argc, char **argv){    reiserfs_filsys_t * fs;    int force = 0;    char * device_name = NULL;    char * jdevice_name = NULL;    unsigned long fs_size = 0;    int c;    static int flag;    program_name = strrchr( argv[ 0 ], '/' );        if (program_name)	program_name++;    else	program_name = argv[ 0 ];        if (argc < 2)	print_usage_and_exit ();        memset(UUID, 0, 16);        while (1) {		static struct option options[] = {			{"block-size", required_argument, 0, 'b'},			{"journal-device", required_argument, 0, 'j'},			{"journal-size", required_argument, 0, 's'},			{"transaction-max-size", required_argument, 0, 't'},			{"journal-offset", required_argument, 0, 'o'},			{"badblocks", required_argument, 0, 'B'},			{"hash", required_argument, 0, 'h'},			{"uuid", required_argument, 0, 'u'},			{"label", required_argument, 0, 'l'},			{"format", required_argument, &flag, 1},			{0, 0, 0, 0}		};		int option_index;      		c = getopt_long (argc, argv, "b:j:s:t:o:h:u:l:VfdB:q",						 options, &option_index);		if (c == -1)			break;			switch (c) {		case 0:			if (flag) {				Format = optarg;				flag = 0;			}			break;		case 'b': /* --block-size */			set_block_size (optarg, &Block_size);			break;		case 'j': /* --journal-device */			Create_default_journal = 0;			jdevice_name = optarg;			break;		case 's': /* --journal-size */			Create_default_journal = 0;			set_journal_device_size (optarg);	    			break;		case 't': /* --transaction-max-size */			Create_default_journal = 0;			set_transaction_max_size (optarg);			break;		case 'o': /* --offset */			Create_default_journal = 0;			set_offset_in_journal_device (optarg);			break;		case 'B': /* --badblock-list */			asprintf (&badblocks_file, "%s", optarg);						break;				case 'h': /* --hash */			set_hash_function (optarg);			break;		case 'v': /* --format */			set_reiserfs_version (optarg);			break;		case 'V':			mode = DO_NOTHING;			break;		case 'f':			force ++;			break;		case 'd':			mode |= DEBUG_MODE;			break;				case 'u':#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)			if (uuid_parse(optarg, UUID) < 0) {			    reiserfs_warning(stderr, "Invalid UUID '%s' is "					     "specified\n", optarg);			    return 1;			}#else			message ("Cannot set up the UUID, uuidlib was not "				 "found by configure.\n");			return 1;#endif			break;				case 'l':			LABEL = optarg;			break;		case 'q':			mode |= QUIET_MODE;			break;		default:			print_usage_and_exit();		}    }    print_banner (program_name);    misc_print_credit(stdout);    printf("\n");        if (mode & QUIET_MODE)	fclose(stdout);        if (mode == DO_NOTHING)	    exit(0);    /* device to be formatted */    device_name = argv [optind];        if (optind == argc - 2) {        /* number of blocks for filesystem is specified */        fs_size = str2int (argv[optind + 1]);    } else if (optind == argc - 1) {        /* number of blocks is not specified */        if (!(fs_size = count_blocks (device_name, Block_size)))		exit(1);    } else {        print_usage_and_exit ();    }    if (is_journal_default (device_name, jdevice_name, Block_size))        Create_default_journal = 1;        if (!(mode & QUIET_MODE) && !can_we_format_it (device_name, force))        return 1;	    if (jdevice_name)        if (!(mode & QUIET_MODE) && !can_we_format_it (jdevice_name, force))            return 1;    fs = reiserfs_create (device_name, select_format(), fs_size, Block_size, 	Create_default_journal, 1);        if (!fs) {        return 1;    }		    if (!reiserfs_create_journal (fs, jdevice_name, Offset, Journal_size, 	Max_trans_size))     {        return 1;    }    if (!reiserfs_create_ondisk_bitmap (fs)) {        return 1;    }    /* these fill buffers (super block, first bitmap, root block) with       reiserfs structures */#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)    if (!uuid_is_null(UUID) && fs->fs_format != REISERFS_FORMAT_3_6) {	reiserfs_warning(stderr, "UUID can be specified only with 3.6 format\n");	return 1;    }#endif    if (badblocks_file) {	if (create_badblock_bitmap (fs, badblocks_file))	    exit(1);    }    make_super_block (fs);    make_bitmap (fs);    make_root_block (fs);    add_badblock_list (fs, 1);    report (fs, jdevice_name);    if (!force && !(mode & QUIET_MODE)) {        fprintf (stderr, "ATTENTION: YOU SHOULD REBOOT AFTER FDISK!\n"                "\tALL DATA WILL BE LOST ON '%s'", device_name);        if (jdevice_name && strcmp (jdevice_name, device_name))            fprintf (stderr, " AND ON JOURNAL DEVICE '%s'", jdevice_name);        if (!user_confirmed (stderr, "!\nContinue (y/n):", "y\n"))            return 1;    }    invalidate_other_formats (fs->fs_dev);    zero_journal (fs);    reiserfs_close (fs);    printf ("Syncing.."); fflush (stdout);    sync ();    printf ("ok\n");     if (mode & DEBUG_MODE)	return 0;        printf("\nTell your friends to use a kernel based on 2.4.18 or "	"later, and especially not a\nkernel based on 2.4.9, "	"when you use reiserFS. Have fun.\n\n");            printf("ReiserFS is successfully created on %s.\n", device_name);    return 0;}/*  * Use BSD fomatting. * Local variables: * c-indentation-style: "bsd" * mode-name: "BSDC" * c-basic-offset: 4 * tab-width: 4 * End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -