summaryrefslogtreecommitdiffstats
path: root/Python/memmove.c
blob: 6fb0dad934d198586ab19c7b7a12964b76bc1ecb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

/* A perhaps slow but I hope correct implementation of memmove */

extern char *memcpy(char *, char *, int);

char *
memmove(char *dst, char *src, int n)
{
	char *realdst = dst;
	if (n <= 0)
		return dst;
	if (src >= dst+n || dst >= src+n)
		return memcpy(dst, src, n);
	if (src > dst) {
		while (--n >= 0)
			*dst++ = *src++;
	}
	else if (src < dst) {
		src += n;
		dst += n;
		while (--n >= 0)
			*--dst = *--src;
	}
	return realdst;
}
lass="hl opt">("Error occurred while trying to read signal buffer:", e); #endif return 0; } }); EMSCRIPTEN_KEEPALIVE int Py_EMSCRIPTEN_SIGNAL_HANDLING = 0; void _Py_CheckEmscriptenSignals(void) { if (!Py_EMSCRIPTEN_SIGNAL_HANDLING) { return; } int signal = _Py_CheckEmscriptenSignals_Helper(); if (signal) { PyErr_SetInterruptEx(signal); } } #define PY_EMSCRIPTEN_SIGNAL_INTERVAL 50 static int emscripten_signal_clock = PY_EMSCRIPTEN_SIGNAL_INTERVAL; void _Py_CheckEmscriptenSignalsPeriodically(void) { if (!Py_EMSCRIPTEN_SIGNAL_HANDLING) { return; } emscripten_signal_clock--; if (emscripten_signal_clock == 0) { emscripten_signal_clock = PY_EMSCRIPTEN_SIGNAL_INTERVAL; _Py_CheckEmscriptenSignals(); } }