示例#1
0
文件: nvram.c 项目: Cribstone/linino
int nvram_parse_mac_addr(const char *nvram, unsigned nvram_len,
			 const char *name, char *mac)
{
	char *buf;
	char *mac_str;
	int ret;
	int t;

	buf = vmalloc(nvram_len);
	if (!buf)
		return -ENOMEM;

	memcpy(buf, nvram, nvram_len);
	buf[nvram_len - 1] = '\0';

	mac_str = nvram_find_var(name, buf, nvram_len);
	if (!mac_str) {
		ret = -EINVAL;
		goto free;
	}

	t = sscanf(mac_str, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
		   &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);

	if (t != 6) {
		ret = -EINVAL;
		goto free;
	}

	ret = 0;

 free:
	vfree(buf);
	return ret;
}
示例#2
0
文件: nvram.c 项目: sbingner/cyanide
int nvram_get_var(const char* name) {
	enter_critical_section();
	NvramVar* var = nvram_find_var(name);
	if(var == NULL) {
		puts("unable to find nvram entry\n\n");
		exit_critical_section();
		return -1;
	}

	printf("%s = %s\n", var->name, var->string);
	exit_critical_section();

	return 0;
}
示例#3
0
文件: nvram.c 项目: sbingner/cyanide
int nvram_remove_var(const char* name) {
	NvramVar* var = nvram_find_var(name);
	if(var == NULL) {
		return -1;
	}

	NvramVar* next = var->next;
	NvramVar* prev = var->prev;

	next->prev = prev;
	prev->next = next;

	var->next = 0;
	var->prev = 0;

	free(var->string);
	free(var);

	return 0;
}
示例#4
0
文件: nvram.c 项目: sbingner/cyanide
int nvram_set_var(const char* name, const char* value) {
	enter_critical_section();
	NvramVar* var = NULL;
	var = nvram_find_var(name);
	if(var != NULL) {
		nvram_remove_var(name);
		var = NULL;
	}
	NvramVar* next = (NvramVar*) gNvramList;
	NvramVar* prev = (NvramVar*) gNvramList->prev;

	var = malloc(sizeof(NvramVar));
	if(var == NULL) {
		exit_critical_section();
		return -1;
	}

	strncpy(var->name, name, 0x40);
	var->string = malloc(0x200);
	if(var->string == NULL) {
		free(var);
		exit_critical_section();
		return -1;
	}
	
	strncpy(var->string, value, 0x200);
	var->integer = strtoul(var->string, NULL, 0);
	var->save = 1;

	var->next = next;
	var->prev = prev;

	next->prev = var;
	prev->next = var;

	exit_critical_section();
	return 0;
}
示例#5
0
文件: main.c 项目: Gitsyshk/iDove
int main(int argc, CmdArg* argv) {
	int i = 0;
	char result[0x10];
	if(!gGpHasInit || gCmdCount == 0) {
		if(gp_init()) {
			puts("Unable to initialize greenpois0n!!\n");
			return -1;
		}
		puts("=========================\n");
		puts("iFaith Thanks & Credits:\n");
		puts("=========================\n");
		puts("* AKi_nG\n");
		puts("* bile\n");
		puts("* Chronic Dev-Team\n");
		puts("* CPICH\n");
		puts("* cj\n");
		puts("* demize\n");
		puts("* geohot\n");
		puts("* GreySyntax\n");
		puts("* iFish12\n");
		puts("* msftguy\n");
		puts("* MuscleNerd\n");
		puts("* Neal\n");
		puts("* planetbeing\n");
		puts("* pod2g\n");
		puts("* posixninja\n");
		puts("* qwertyoruiop\n");
		puts("* sbingner\n");
		puts("* ThePirate\n");
		puts("* vonswanko\n");
		puts("=========================\n");
		cmd_detect();
		fs_mount("nand0a", "hfs", "/boot");		
		//puts("HFS+ filesystem mounted.\n")
		//puts("=========================\n");		
		return 0;
	}

	for(i = 1; i < argc; i++) {
		if(!strcmp(argv[i].string, "$_")) {
			NvramVar* retval = nvram_find_var("?");
			argv[i].string = retval->string;
			continue;
		}
		if(argv[i].string[0] == '$') {
			NvramVar* var = nvram_find_var(&(argv[i].string[1]));
			if(var == NULL) {
				printf("Unable to find nvram var for %s\n", &(argv[i].string[1]));
			} else {
				argv[i].string = var->string;
			}
		}
	}

	if(argc > 1) {
		int i = 0;
		char* command = argv[1].string;
		for(i = 0; i < gCmdCount; i++) {
			if(!strcmp(gCmdCommands[i]->name, command)) {
				int ret = gCmdCommands[i]->handler(argc-1, &argv[1]);
				snprintf(result, 0xF, "0x%x", ret);
				nvram_set_var("cmd-results", result);
				return ret;
			}
		}

		printf("Command %s not found.\n\n", command);
		return -1;
	}

	return 0;
}