Here is the original code
aud.h
Code:
/* Audio.c functions */
bool InitAudio(int freq, Uint16 frmat, int chann, int buff);
char * LoadAudioList(char * file_tracks); // The evil function here
bool PlayTrackList(char playlist[][TRACK_LENGTH], int random);
void NextAudioTrack(void);
bool OpenAudio(char * audio_name);
bool PlayAudio(int loop);
void CleanupAudio(void);
Code:
char * LoadAudioList(char * file_tracks)
{
FILE * audio;
static char playlist[TOTAL_SONGS][TRACK_LENGTH];
int bytes = 0;
if ((audio = fopen(file_tracks, "rb")) == NULL)
{
fprintf(logging, "Error when opening file: %s\n", file_tracks);
return NULL;
}
while ((bytes < TRACK_LENGTH) && (playlist[total][bytes] = getc(audio)) != EOF &&
total < TOTAL_SONGS)
{
if (playlist[total][bytes] == ';')
{
playlist[total][bytes] = '\0';
getc(audio);
getc(audio);
total++;
bytes = 0;
}
else
bytes++;
}
if (playlist[total][bytes] == EOF)
{
playlist[total][bytes] = '\0';
}
fprintf(logging, "Total songs: %d\n", total);
return *playlist;
}
Now using typedef
aud.h
Code:
typedef char (*twod)[TRACK_LENGTH];
/* Audio.c function */
bool InitAudio(int freq, Uint16 frmat, int chann, int buff);
twod LoadAudioList(char * file_tracks);
bool PlayTrackList(char playlist[][TRACK_LENGTH], int random);
void NextAudioTrack(void);
bool OpenAudio(char * audio_name);
bool PlayAudio(int loop);
void CleanupAudio(void);
LoadAudioList in source file audio.c
Code:
twod LoadAudioList(char * file_tracks)
{
FILE * audio;
static char playlist[TOTAL_SONGS][TRACK_LENGTH];
int bytes = 0;
if ((audio = fopen(file_tracks, "rb")) == NULL)
{
fprintf(logging, "Error when opening file: %s\n", file_tracks);
return NULL;
}
while ((bytes < TRACK_LENGTH) && (playlist[total][bytes] = getc(audio)) != EOF &&
total < TOTAL_SONGS)
{
if (playlist[total][bytes] == ';')
{
playlist[total][bytes] = '\0';
getc(audio);
getc(audio);
total++;
bytes = 0;
}
else
bytes++;
}
if (playlist[total][bytes] == EOF)
{
playlist[total][bytes] = '\0';
}
fprintf(logging, "Total songs: %d\n", total);
return playlist;
}
Here is where the function gets called and the warning comes up
in another source file
Code:
typedef char (*twod)[81];
twod playlist;
/* Load audio playlist */
playlist = LoadAudioList("game_songs.txt");//The warning is here
if (playlist != NULL)
PlayTrackList(playlist, 1);