Exemplo n.º 1
0
inline STDMETHODIMP get_command_string(void *p, UINT id,
				       UINT flags, UINT *reserved,
				       LPSTR name, UINT size)
{
	const char *text;

	if (!(flags & GCS_HELPTEXT))
		return E_INVALIDARG;

	text = get_menu_item_text(id);
	if (!text)
		return E_INVALIDARG;

	if (flags & GCS_UNICODE) {
		size_t len = strlen(text) + 1;
		LPWSTR tw = xmalloc(len * sizeof(wchar_t));
		/* need to convert terminating NULL as well */
		mbstowcs(tw, text, len);
		lstrcpynW((LPWSTR)name, tw, size);
		free(tw);
	} else
		lstrcpynA(name, text, size);

	return S_OK;
}
Exemplo n.º 2
0
static int menu_branch(struct git_data *this_, UINT id)
{
	int status;
	char *wd = wd_from_path(this_->name, NULL);
	struct strbuf err;
	const char *menu_item_text;
	const char **argv;

	free_func_t argv_free;
	void *argv_data;

	const char *generic_argv[] = { "git", "checkout", NULL, NULL };

	menu_item_text = get_menu_item_text(id);
	generic_argv[2] = menu_item_text;

	argv = menu_get_platform_argv(MENU_BRANCH, NULL,
			&argv_free, &argv_data);
	if (!argv)
		argv = generic_argv;

	strbuf_init(&err, 0);

	status = exec_program_v(wd, NULL, &err, HIDDENMODE | WAITMODE, argv);

	/* if nothing, terribly wrong happened, show the confirmation */
	if (-1 != status)
		/* strangely enough even success message is on stderr */
		debug_git_mbox(err.buf);

	if (argv_free)
		argv_free(argv_data);
	free(wd);

	return 1;
}