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

📄 nbsplit.c

📁 ROM programming of HTC mobile devices
💻 C
字号:
/*
 * Original Source from:
 *   Copyright (C) 2005 mamaich @ xda-developers
 *   Copyright (C) 2007-2008 tadzio @ xda-developers
 *
 * Linux version:
 *   Copyright (C) 2008 Pau Oliva Fora - pof @ xda-developers
 *
 * There is no formal license with this code
 * You can basically do what you want with it
 *
 */


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define PAY_EXT ".payload"
#define EXTRA_EXT ".extra"


int main(int argc, char *argv[])
{

	size_t payloadChunkSize = 0, extraChunkSize = 0;  // safe default
	size_t bytes;
	char *filearg;
	char *filename;
	char *buffer;
	FILE *nb, *payload, *extra;

	printf("NBSplit 2.1rc2\n");

	if(argc < 3)
	{
	printf("Usage: %s -hermes|-kaiser|-titan|-wizard|-athena|-sp\n"
		"|-data <number> -extra <number> <filename.nb>\n"
		"Generates <filename.nb.payload> and <filename.nb.extra> from <filename.nb>\n"
		"<filename.nb> will NOT get overwritten.\n", argv[0]);
		return 1;
	}


	if(!strcmp(argv[1], "-wizard") || !strcmp(argv[1], "-athena"))
	{
		printf("Wizard and Athena ROMs do not contain extra bytes.\n"
		"You need not run %s. Just copy <filename.nb> to <filename.nb.payload>\n", argv[0]);
		return 0;
	}

	// payload and extra chunk sizes explicitely given
	if(argc > 5 && !strcmp(argv[1], "-data") && !strcmp(argv[3], "-extra"))  // need nbsplit -data xxx -extra yyy <filename.nb>
	{
		payloadChunkSize = atoi(argv[2]);
		extraChunkSize = atoi(argv[4]);
	}


	if(!strcmp(argv[1], "-hermes") || !strcmp(argv[1], "-sp"))
	{
		payloadChunkSize = 0x200;
		extraChunkSize = 0x08;
	}

	if(!strcmp(argv[1], "-titan") || !strcmp(argv[1], "-kaiser"))
	{
		payloadChunkSize = 0x800;
		extraChunkSize = 0x08;
	}

#if 0 // Does not work with WM6 emulator images
	if(!strcmp(argv[1], "-emu"))
	{
		payloadChunkSize = 0xF000;
		extraChunkSize = 0x1000;
	}
#endif

	if(payloadChunkSize == 0)  // no matching argument given
	{
		printf("Wrong or missing parameters.\n");
		printf("Usage: %s -hermes|-kaiser|-titan|-acer|-wizard|-athena|-sp\n"
			   "|-data <number> -extra <number> <filename.nb>\n"
			   "Generates <filename.nb.payload> and <filename.nb.extra> from <filename.nb>\n"
			   "<filename.nb> will NOT get overwritten.\n", argv[0]);
		return 1;
	}

	filearg = argv[argc-1];  // last argument is the filename
	filename = (char *)malloc(strlen(filearg) + strlen(PAY_EXT) + strlen(EXTRA_EXT));

	if(!filename)
	{
		printf("Error allocating memory\n");
		return 1;
	}


	if(NULL == (nb = fopen(filearg, "rb")))
	{
		printf("Could not open input file %s\n", filearg);
		free(filename);
		return 1;
	}

	sprintf(filename, "%s%s", filearg, PAY_EXT);

	if(NULL == (payload = fopen(filename, "w+b")))
	{
		printf("Could not open output file %s\n", filename);
		free(filename);
		fclose(nb);
		return 1;
	}

	sprintf(filename, "%s%s", filearg, EXTRA_EXT);

	if(NULL == (extra = fopen(filename, "w+b")))
	{
		printf("Could not open output file %s\n", filename);
		free(filename);
		fclose(payload);
		fclose(nb);
		return 1;
	}

	free(filename);

	printf("Using data chunk size = 0x%x and extra chunk size = 0x%x\n"
		"on file %s\n", payloadChunkSize, extraChunkSize, filearg );

	buffer = (char *)malloc(payloadChunkSize + extraChunkSize);

	do
	{
		bytes = fread(buffer, 1, payloadChunkSize, nb);
		if(bytes != fwrite(buffer, 1, bytes, payload))
		{
			printf("Error writing to payload file. Generated files are unusable!\n");
			free(buffer);
			fclose(nb);
			fclose(payload);
			fclose(extra);
			return 1;
		}

		if(bytes != payloadChunkSize)
			break;

		bytes = fread(buffer, 1, extraChunkSize, nb);
		if(bytes != fwrite(buffer, 1, bytes, extra))
		{
			printf("Error writing to extra file. Generated files are unusable!\n");
			free(buffer);
			fclose(nb);
			fclose(payload);
			fclose(extra);
			return 1;
		}
		if(bytes != extraChunkSize)
			break;
	}
	while(1);

	free(buffer);

	fclose(nb);
	fclose(payload);
	fclose(extra);

	printf("Done.\n");

	return 0;
}

⌨️ 快捷键说明

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