Add some casting to keep MSVC happy
[ardour.git] / libs / evoral / src / libsmf / smf.c
index 227ea8c263088ca8c7b2adf5c46d88cdaf418d5a..67cc7b889e7b8c48a4c67d892b2615ea7315c098 100644 (file)
 #include <assert.h>
 #include <math.h>
 #include <errno.h>
+#ifdef PLATFORM_WINDOWS
+#include <winsock2.h>
+#else
 #include <arpa/inet.h>
+#endif
 #include "smf.h"
 #include "smf_private.h"
 
@@ -52,7 +56,7 @@ smf_new(void)
 {
        int cantfail;
 
-       smf_t *smf = malloc(sizeof(smf_t));
+       smf_t *smf = (smf_t*)malloc(sizeof(smf_t));
        if (smf == NULL) {
                g_critical("Cannot allocate smf_t structure: %s", strerror(errno));
                return (NULL);
@@ -85,7 +89,7 @@ smf_delete(smf_t *smf)
 {
        /* Remove all the tracks, from last to first. */
        while (smf->tracks_array->len > 0)
-               smf_track_delete(g_ptr_array_index(smf->tracks_array, smf->tracks_array->len - 1));
+               smf_track_delete((smf_track_t*)g_ptr_array_index(smf->tracks_array, smf->tracks_array->len - 1));
 
        smf_fini_tempo(smf);
 
@@ -105,7 +109,7 @@ smf_delete(smf_t *smf)
 smf_track_t *
 smf_track_new(void)
 {
-       smf_track_t *track = malloc(sizeof(smf_track_t));
+       smf_track_t *track = (smf_track_t*)malloc(sizeof(smf_track_t));
        if (track == NULL) {
                g_critical("Cannot allocate smf_track_t structure: %s", strerror(errno));
                return (NULL);
@@ -129,15 +133,21 @@ smf_track_delete(smf_track_t *track)
        assert(track);
        assert(track->events_array);
 
-       /* Remove all the events, from last to first. */
-       while (track->events_array->len > 0)
-               smf_event_delete(g_ptr_array_index(track->events_array, track->events_array->len - 1));
+       /* Remove all the events */
+       unsigned int i;
+       for (i = 0; i < track->events_array->len; ++i) {
+               smf_event_t* ev = (smf_event_t*)g_ptr_array_index(track->events_array, i);
+               free (ev->midi_buffer);
+               free (ev);
+       }
+
+       g_ptr_array_remove_range(track->events_array, 0, track->events_array->len);
+       track->number_of_events = 0;
 
        if (track->smf)
                smf_track_remove_from_smf(track);
 
        assert(track->events_array->len == 0);
-       assert(track->number_of_events == 0);
        g_ptr_array_free(track->events_array, TRUE);
 
        memset(track, 0, sizeof(smf_track_t));
@@ -151,7 +161,9 @@ smf_track_delete(smf_track_t *track)
 void
 smf_add_track(smf_t *smf, smf_track_t *track)
 {
+#ifndef NDEBUG
        int cantfail;
+#endif
 
        assert(track->smf == NULL);
 
@@ -162,8 +174,13 @@ smf_add_track(smf_t *smf, smf_track_t *track)
        track->track_number = smf->number_of_tracks;
 
        if (smf->number_of_tracks > 1) {
+#ifndef NDEBUG
                cantfail = smf_set_format(smf, 1);
                assert(!cantfail);
+#else
+               smf_set_format(smf, 1);
+#endif
+               
        }
 }
 
@@ -213,7 +230,7 @@ smf_track_remove_from_smf(smf_track_t *track)
 smf_event_t *
 smf_event_new(void)
 {
-       smf_event_t *event = malloc(sizeof(smf_event_t));
+       smf_event_t *event = (smf_event_t*)malloc(sizeof(smf_event_t));
        if (event == NULL) {
                g_critical("Cannot allocate smf_event_t structure: %s", strerror(errno));
                return (NULL);
@@ -237,7 +254,7 @@ smf_event_new(void)
  * \return Event containing MIDI data or NULL.
  */
 smf_event_t *
-smf_event_new_from_pointer(void *midi_data, size_t len)
+smf_event_new_from_pointer(const void *midi_data, size_t len)
 {
        smf_event_t *event;
 
@@ -246,12 +263,12 @@ smf_event_new_from_pointer(void *midi_data, size_t len)
                return (NULL);
 
        event->midi_buffer_length = len;
-       event->midi_buffer = malloc(event->midi_buffer_length);
+       event->midi_buffer = (uint8_t*)malloc(event->midi_buffer_length);
        if (event->midi_buffer == NULL) {
                g_critical("Cannot allocate MIDI buffer structure: %s", strerror(errno));
                smf_event_delete(event);
 
-               return (NULL); 
+               return (NULL);
        }
 
        memcpy(event->midi_buffer, midi_data, len);
@@ -269,7 +286,7 @@ smf_event_new_from_pointer(void *midi_data, size_t len)
  * like this:
  *
  * smf_event_new_from_bytes(0xC0, 0x42, -1);
- * 
+ *
  * \param first_byte First byte of MIDI message.  Must be valid status byte.
  * \param second_byte Second byte of MIDI message or -1, if message is one byte long.
  * \param third_byte Third byte of MIDI message or -1, if message is two bytes long.
@@ -336,12 +353,12 @@ smf_event_new_from_bytes(int first_byte, int second_byte, int third_byte)
        }
 
        event->midi_buffer_length = len;
-       event->midi_buffer = malloc(event->midi_buffer_length);
+       event->midi_buffer = (uint8_t*)malloc(event->midi_buffer_length);
        if (event->midi_buffer == NULL) {
                g_critical("Cannot allocate MIDI buffer structure: %s", strerror(errno));
                smf_event_delete(event);
 
-               return (NULL); 
+               return (NULL);
        }
 
        event->midi_buffer[0] = first_byte;
@@ -377,12 +394,12 @@ smf_event_delete(smf_event_t *event)
 static gint
 events_array_compare_function(gconstpointer aa, gconstpointer bb)
 {
-       smf_event_t *a, *b;
-       
+       const smf_event_t *a, *b;
+
        /* "The comparison function for g_ptr_array_sort() doesn't take the pointers
            from the array as arguments, it takes pointers to the pointers in the array." */
-       a = (smf_event_t *)*(gpointer *)aa;
-       b = (smf_event_t *)*(gpointer *)bb;
+       a = (const smf_event_t *)*(const gpointer *)aa;
+       b = (const smf_event_t *)*(const gpointer *)bb;
 
        if (a->time_pulses < b->time_pulses)
                return (-1);
@@ -688,12 +705,15 @@ smf_track_get_next_event(smf_track_t *track)
 {
        smf_event_t *event, *next_event;
 
+       /* Track is empty? */
+       if (track->number_of_events == 0)
+               return (NULL);
+
        /* End of track? */
        if (track->next_event_number == 0)
                return (NULL);
 
        assert(track->next_event_number >= 1);
-       assert(track->number_of_events > 0);
 
        event = smf_track_get_event_by_number(track, track->next_event_number);
 
@@ -770,7 +790,7 @@ smf_track_get_event_by_number(const smf_track_t *track, size_t event_number)
        if (event_number > track->number_of_events)
                return (NULL);
 
-       event = g_ptr_array_index(track->events_array, event_number - 1);
+       event = (smf_event_t*)g_ptr_array_index(track->events_array, event_number - 1);
 
        assert(event);
 
@@ -787,7 +807,7 @@ smf_track_get_last_event(const smf_track_t *track)
 
        if (track->number_of_events == 0)
                return (NULL);
-       
+
        event = smf_track_get_event_by_number(track, track->number_of_events);
 
        return (event);
@@ -842,7 +862,7 @@ smf_get_next_event(smf_t *smf)
        }
 
        event = smf_track_get_next_event(track);
-       
+
        assert(event != NULL);
 
        event->track->smf->last_seek_position = -1.0;
@@ -857,9 +877,8 @@ smf_get_next_event(smf_t *smf)
 void
 smf_skip_next_event(smf_t *smf)
 {
-       void *notused;
-
-       notused = smf_get_next_event(smf);
+       smf_event_t *ignored = smf_get_next_event(smf);
+       (void) ignored;
 }
 
 /**
@@ -881,7 +900,7 @@ smf_peek_next_event(smf_t *smf)
        }
 
        event = smf_peek_next_event_from_track(track);
-       
+
        assert(event != NULL);
 
        return (event);
@@ -947,7 +966,7 @@ smf_seek_to_event(smf_t *smf, const smf_event_t *target)
                        smf_skip_next_event(smf);
                else
                        break;
-       }       
+       }
 
        smf->last_seek_position = event->time_seconds;
 
@@ -1038,7 +1057,7 @@ size_t
 smf_get_length_pulses(const smf_t *smf)
 {
        int i;
-       size_t pulses;
+       size_t pulses = 0;
 
        for (i = 1; i <= smf->number_of_tracks; i++) {
                smf_track_t *track;