RFC: Alternative for exemaker

Adrian Buehlmann adrian at cadifra.com
Sat Jun 23 04:13:26 CDT 2012


On 2012-06-23 08:49, Adrian Buehlmann wrote:
> #include <Python.h>
> 
> #include <windows.h>
> #include <Shlwapi.h>
> 
> #define _NUM_ARGS 100
> 
> static char exename[1000];
> static char scriptname[1000];
> static char *pyargv[_NUM_ARGS + 10];
> 
> int main(int argc, char *argv[])
> {
> 	int ret;
> 	int i;
> 
> 	GetModuleFileName(NULL, exename, sizeof(exename));
> 
> 	strncpy_s(scriptname, sizeof(scriptname), exename, sizeof(exename));
> 	PathRemoveFileSpec(scriptname);
> 	strcat_s(scriptname, sizeof(scriptname), "\\hg.py");
> 
> 	pyargv[0] = exename;
> 	pyargv[1] = scriptname;
> 	for (i = 1; i < argc; i++) {
> 		if (i > _NUM_ARGS) {
> 			fprintf(stderr, "abort: too many arguments\n");
> 			return 255;
> 		}
> 		pyargv[1 + i] = argv[i];
> 	}
> 
> 	Py_Initialize();
> 	ret = Py_Main(1 + i, pyargv);
> 	Py_Finalize();
> 	return ret;

This variant is a bit simpler:

	n = 0;
	pyargv[n++] = exename;
	pyargv[n++] = scriptname;
	for (i = 1; i < argc; i++) {
		if (i > _NUM_ARGS) {
			fprintf(stderr, "abort: too many arguments\n");
			return 255;
		}
		pyargv[n++] = argv[i];
	}

	Py_Initialize();
	ret = Py_Main(n, pyargv);
	Py_Finalize();
	return ret;

https://bitbucket.org/abuehl/hgexe/changeset/a649fb719581/raw


More information about the Mercurial-devel mailing list