#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"
smf_extend(smf_t *smf, const int length)
{
int i, previous_file_buffer_length = smf->file_buffer_length;
- char *previous_file_buffer = smf->file_buffer;
+ char *previous_file_buffer = (char*)smf->file_buffer;
/* XXX: Not terribly efficient. */
smf->file_buffer_length += length;
return (0);
}
-static int
-format_vlq(unsigned char *buf, int length, unsigned long value)
+int
+smf_format_vlq(unsigned char *buf, int length, unsigned long value)
{
int i;
unsigned long buffer;
/* "2 +" is for leading 0xFF 0xtype. */
event->midi_buffer_length = 2 + text_length + MAX_VLQ_LENGTH;
- 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);
event->midi_buffer[0] = 0xFF;
event->midi_buffer[1] = type;
- vlq_length = format_vlq(event->midi_buffer + 2, MAX_VLQ_LENGTH - 2, text_length);
+ vlq_length = smf_format_vlq(event->midi_buffer + 2, MAX_VLQ_LENGTH - 2, text_length);
copied_length = snprintf((char *)event->midi_buffer + vlq_length + 2, event->midi_buffer_length - vlq_length - 2, "%s", text);
assert(copied_length == text_length);
unsigned char buf[MAX_VLQ_LENGTH];
int vlq_length;
- vlq_length = format_vlq(buf, MAX_VLQ_LENGTH, value);
+ vlq_length = smf_format_vlq(buf, MAX_VLQ_LENGTH, value);
return (track_append(event->track, buf, vlq_length));
}
* Takes smf->file_buffer and saves it to the file.
*/
static int
-write_file(smf_t *smf, const char *file_name)
+write_file(smf_t *smf, FILE* stream)
{
- FILE *stream;
-
- stream = fopen(file_name, "w+");
- if (stream == NULL) {
- g_critical("Cannot open input file: %s", strerror(errno));
-
- return (-1);
- }
-
if (fwrite(smf->file_buffer, 1, smf->file_buffer_length, stream) != smf->file_buffer_length) {
g_critical("fwrite(3) failed: %s", strerror(errno));
return (-2);
}
- if (fclose(stream)) {
- g_critical("fclose(3) failed: %s", strerror(errno));
-
- return (-3);
- }
-
return (0);
}
static int
smf_validate(smf_t *smf)
{
- int trackno, eventno, eot_found;
+ int trackno, eot_found;
+ size_t eventno;
smf_track_t *track;
smf_event_t *event;
assert(event);
if (!smf_event_is_valid(event)) {
- g_critical("Event #%d on track #%d is invalid.", eventno, trackno);
+ g_critical("Event #%zu on track #%d is invalid.", eventno, trackno);
return (-5);
}
{
assert(a->event_number == b->event_number);
assert(a->delta_time_pulses == b->delta_time_pulses);
- assert(abs(a->time_pulses - b->time_pulses) <= 2);
+ assert(abs((long)(a->time_pulses - b->time_pulses)) <= 2);
assert(fabs(a->time_seconds - b->time_seconds) <= 0.01);
assert(a->track_number == b->track_number);
assert(a->midi_buffer_length == b->midi_buffer_length);
static void
assert_smf_track_is_identical(const smf_track_t *a, const smf_track_t *b)
{
- int i;
+ size_t i;
assert(a->track_number == b->track_number);
assert(a->number_of_events == b->number_of_events);
}
static void
-assert_smf_saved_correctly(const smf_t *smf, const char *file_name)
+assert_smf_saved_correctly(const smf_t *smf, FILE* file)
{
smf_t *saved;
- saved = smf_load(file_name);
+ saved = smf_load (file);
assert(saved != NULL);
assert_smf_is_identical(smf, saved);
/**
* Writes the contents of SMF to the file given.
* \param smf SMF.
- * \param file_name Path to the file.
+ * \param file File descriptor.
* \return 0, if saving was successfull.
*/
int
-smf_save(smf_t *smf, const char *file_name)
+smf_save(smf_t *smf, FILE* file)
{
int i, error;
smf_track_t *track;
}
}
- error = write_file(smf, file_name);
+ error = write_file(smf, file);
free_buffer(smf);
return (error);
#ifndef NDEBUG
- assert_smf_saved_correctly(smf, file_name);
+ assert_smf_saved_correctly(smf, file);
#endif
return (0);