72 static PyObject *py_encoder(PyObject *self, PyObject *args)
73 {
74 unsigned char *data;
75 unsigned char *random;
76 int ldata, pr, lrandom;
77
78 if (PyArg_ParseTuple(args, "s#is#", (char **) &data, &ldata, &pr, (char **) &random, &lrandom)) {
79 unsigned char *code;
when PyArg_ParseTuple() succeeds
taking True path
80 int i;
81 uint16_t r=pr;
82 PyObject *result;
83
84 if (! (code = (unsigned char *) malloc(ldata + lrandom)) )
85 return NULL;
when treating unknown void * from pyx/font/_t1code.c:85 as NULL
taking True path
86
87 for (i=0; i<lrandom; i++) {
88 code[i] = random[i] ^ ( r >> 8);
89 r = (code[i] + r) * C1 + C2;
90 }
91
92 for (i=0; i<ldata; i++) {
93 code[i+lrandom] = data[i] ^ ( r >> 8);
94 r = (code[i+lrandom] + r) * C1 + C2;
95 }
96
97 result = PyString_FromStringAndSize((const char *)code, ldata + lrandom);
98 free(code);
99 return result;
100 }
101 else return NULL;
102
103 }
104