示例#1
0
const char16_t *calchook_ndls_run(void *, void *, unsigned int argc, char16_t *argv[])
{
	if(argc == 0)
		return u"\"Missing Argument!\"";

	unsigned int i;
	char *argv_prgm[argc];
	for(i = 0; i < argc; ++i)
	{
		size_t len = utf16_strlen(reinterpret_cast<uint16_t*>(argv[i]));
		argv_prgm[i] = new char[2*len + 1];
		if(!argv_prgm[i])
		{
			// Free already allocated argv_prgm
			for(unsigned int j = 0; j < i; ++j)
				delete[] argv_prgm[j];

			return u"\"Out of memory!\"";
		}

		// Strip quotes from strings
		if((*argv[i] == '"' && *(argv[i]+len-1) == '"')
			|| (*argv[i] == '\'' && *(argv[i]+len-1) == '\''))
		{
			*(argv[i]+len-1) = 0;
			utf162ascii(argv_prgm[i], reinterpret_cast<uint16_t*>(argv[i] + 1), 2*len);
		}
		else
			utf162ascii(argv_prgm[i], reinterpret_cast<uint16_t*>(argv[i]), 2*len);
	}

	int ret = ld_exec_with_args(argv_prgm[0], argc - 1, argv_prgm + 1, nullptr);

	// Free argv_prgm
	for(unsigned int j = 0; j < i; ++j)
		delete[] argv_prgm[j];

	// The return value is never freed, so use a static buffer
	static char16_t ret16[16]; static char retascii[16];
	snprintf(retascii, 16, "%d", ret);
	ascii2utf16(ret16, retascii, 16);
	return ret16;
}
示例#2
0
int ld_exec(const char *path, void **resident_ptr) {
	return ld_exec_with_args(path, 0, NULL, resident_ptr);
}
示例#3
0
int sc_nl_exec(const char *prgm_path, int argsn, char *args[]) {
	return ld_exec_with_args(prgm_path, argsn, args, NULL);
}