X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=python%2Fmidi.c;h=01c9925ece5445a65d947109f6efc7bc3c80945a;hb=58ff15e68c0d00ee54ca9f5565d6bc3c8304c076;hp=be06bb66cea0f892ba5ae79d9eb2ae5a7fd06ebb;hpb=bc95f4434f760d41191341ab4508b2064eb19025;p=lilypond.git diff --git a/python/midi.c b/python/midi.c index be06bb66ce..01c9925ece 100644 --- a/python/midi.c +++ b/python/midi.c @@ -40,6 +40,14 @@ each track is an EVENTLIST, where EVENT is #include +char * +compat_itoa (int i) +{ + static char buffer[9]; + snprintf (buffer, 8, "%d", i); + return buffer; +} + /* PyMIDINIT_FUNC isn't defined in Python < 2.3 */ #ifndef PyMODINIT_FUNC # if defined(__cplusplus) @@ -61,11 +69,13 @@ static PyObject *Midi_error; static PyObject *Midi_warning; static PyObject * -midi_error (char const *func, char *s) +midi_error (char const *func, char *s, char *t) { - char *dest = (char*) malloc (sizeof (char) * (strlen (func) + strlen (s) + 1)); + char *dest = (char*) malloc (sizeof (char) + * (strlen (func) + strlen (s) + strlen (t) + 1)); strcpy (dest, func); strcat (dest, s); + strcat (dest, t); PyErr_SetString (Midi_error, dest); free (dest); @@ -293,20 +303,22 @@ midi_parse_track (unsigned char **track, unsigned char *track_end) debug_print ("%s", "\n"); if (memcmp (*track, "MTrk", 4)) - return midi_error (__FUNCTION__, ": MTrk expected"); + { + *track[4] = 0; + return midi_error (__FUNCTION__, ": MTrk expected, got: ", *(char**)track); + } *track += 4; track_len = get_number (track, *track + 4, 4); - debug_print ("track_len: %u\n", track_len); debug_print ("track_size: %u\n", track_size); debug_print ("track begin: %p\n", track); debug_print ("track end: %p\n", track + track_len); if (track_len > track_size) - return midi_error (__FUNCTION__, ": track size corrupt"); + return midi_error (__FUNCTION__, ": track length corrupt: ", compat_itoa (track_len)); pytrack = PyList_New (0); @@ -349,7 +361,7 @@ pymidi_parse_track (PyObject *self, PyObject *args) return 0; if (track_size < 0) - return midi_error (__FUNCTION__, ": negative track size"); + return midi_error (__FUNCTION__, ": negative track size: ", compat_itoa (track_size)); track_end = track + track_size; @@ -371,13 +383,13 @@ midi_parse (unsigned char **midi,unsigned char *midi_end) header_len = get_number (midi, *midi + 4, 4); if (header_len < 6) - return midi_error (__FUNCTION__, ": header too short"); + return midi_error (__FUNCTION__, ": header too short: ", compat_itoa (header_len)); format = get_number (midi, *midi + 2, 2); tracks = get_number (midi, *midi + 2, 2); if (tracks > 32) - return midi_error (__FUNCTION__, ": too many tracks"); + return midi_error (__FUNCTION__, ": too many tracks: ", compat_itoa (tracks)); division = get_number (midi, *midi + 2, 2) * 4; @@ -409,8 +421,11 @@ pymidi_parse (PyObject *self, PyObject *args) return 0; if (memcmp (midi, "MThd", 4)) - return midi_error (__FUNCTION__, ": MThd expected"); - + { + midi[4] = 0; + return midi_error (__FUNCTION__, ": MThd expected, got: ", (char*)midi); + } + midi += 4; midi_end = midi + midi_size;