2323 #define access _access
2424#endif
2525
26+ const char json_typename [][16 ] = {
27+ [JSON_ERROR ] = "ERROR" , [JSON_DONE ] = "DONE" , [JSON_OBJECT ] = "OBJECT" ,
28+ [JSON_OBJECT_END ] = "OBJECT_END" , [JSON_ARRAY ] = "ARRAY" , [JSON_ARRAY_END ] = "ARRAY_END" ,
29+ [JSON_STRING ] = "STRING" , [JSON_NUMBER ] = "NUMBER" , [JSON_TRUE ] = "TRUE" ,
30+ [JSON_FALSE ] = "FALSE" , [JSON_NULL ] = "NULL" ,
31+ };
32+
2633typedef struct {
2734 s8 origin ;
2835 s8 hira_reading ;
2936 s8 pitch_number ;
3037 s8 pitch_pattern ;
3138} fileinfo ;
3239
33- const char json_typename [][16 ] = {
34- [JSON_ERROR ] = "ERROR" , [JSON_DONE ] = "DONE" , [JSON_OBJECT ] = "OBJECT" ,
35- [JSON_OBJECT_END ] = "OBJECT_END" , [JSON_ARRAY ] = "ARRAY" , [JSON_ARRAY_END ] = "ARRAY_END" ,
36- [JSON_STRING ] = "STRING" , [JSON_NUMBER ] = "NUMBER" , [JSON_TRUE ] = "TRUE" ,
37- [JSON_FALSE ] = "FALSE" , [JSON_NULL ] = "NULL" ,
38- };
40+ static void freefileinfo (fileinfo fi [static 1 ]) {
41+ frees8 (& fi -> origin );
42+ frees8 (& fi -> hira_reading );
43+ frees8 (& fi -> pitch_number );
44+ frees8 (& fi -> pitch_pattern );
45+ }
46+
47+ DEFINE_DROP_FUNC_PTR (fileinfo , freefileinfo )
3948
4049static void print_fileinfo (fileinfo fi ) {
4150 printf ("Source: %.*s\nReading: %.*s\nPitch number: %.*s\nPitch pattern: "
@@ -45,13 +54,6 @@ static void print_fileinfo(fileinfo fi) {
4554 (int )fi .pitch_pattern .len , (char * )fi .pitch_pattern .s );
4655}
4756
48- static void freefileinfo (fileinfo fi [static 1 ]) {
49- /* frees8(&fi->origin); */
50- frees8 (& fi -> hira_reading );
51- frees8 (& fi -> pitch_number );
52- frees8 (& fi -> pitch_pattern );
53- }
54-
5557/* static void */
5658/* prints8(s8 z) */
5759/* { */
@@ -66,9 +68,9 @@ static void add_filename(database db, s8 headw, s8 fullpth) {
6668
6769static void add_fileinfo (database db , s8 fullpth , fileinfo fi ) {
6870 s8 sep = S ("\0" );
69- s8 data = concat (fi .origin , sep , fi .hira_reading , sep , fi .pitch_number , sep , fi .pitch_pattern );
71+ _drop_ (frees8 ) s8 data =
72+ concat (fi .origin , sep , fi .hira_reading , sep , fi .pitch_number , sep , fi .pitch_pattern );
7073 addtodb2 (db , fullpth , data );
71- frees8 (& data );
7274}
7375
7476// wrapper for json api
@@ -312,7 +314,10 @@ static void add_from_index(database db, const char *index_path, s8 curdir) {
312314 json_skip_until (s , JSON_OBJECT_END );
313315
314316 add_fileinfo (db , fullpth , fi );
315- freefileinfo (& fi );
317+
318+ frees8 (& fi .hira_reading );
319+ frees8 (& fi .pitch_number );
320+ frees8 (& fi .pitch_pattern );
316321 frees8 (& fullpth );
317322 } else if (reading_files ) {
318323 dbg ("Skipping entry of type '%s' while reading files." , json_typename [type ]);
@@ -391,7 +396,7 @@ static fileinfo getfileinfo(database db, s8 fn) {
391396}
392397
393398static void play_word (s8 word , s8 reading , s8 database_path ) {
394- s8 normread = normalize_reading (reading );
399+ _drop_ ( frees8 ) s8 normread = normalize_reading (reading );
395400
396401 database db = opendb ((char * )database_path .s , true);
397402 s8 * files = getfiles (db , word );
@@ -407,15 +412,14 @@ static void play_word(s8 word, s8 reading, s8 database_path) {
407412 if (reading .len ) {
408413 bool match = false;
409414 for (size_t i = 0 ; i < buf_size (files ); i ++ ) {
410- fileinfo fi = getfileinfo (db , files [i ]);
415+ _drop_ ( freefileinfo ) fileinfo fi = getfileinfo (db , files [i ]);
411416
412417 if (s8equals (normread , fi .hira_reading )) {
413418 printf ("File path: %.*s\n" , (int )files [i ].len , (char * )files [i ].s );
414419 print_fileinfo (fi );
415420 play_audio (files [i ]);
416421 match = true;
417422 }
418- freefileinfo (& fi );
419423 }
420424 if (!match ) {
421425 dbg ("Could not find an audio file with corresponding reading. "
@@ -426,10 +430,9 @@ static void play_word(s8 word, s8 reading, s8 database_path) {
426430 if (!reading .len ) {
427431 // Play all
428432 for (size_t i = 0 ; i < buf_size (files ); i ++ ) {
429- fileinfo fi = getfileinfo (db , files [i ]);
433+ _drop_ ( freefileinfo ) fileinfo fi = getfileinfo (db , files [i ]);
430434 printf ("\nFile path: %.*s\n" , (int )files [i ].len , (char * )files [i ].s );
431435 print_fileinfo (fi );
432- freefileinfo (& fi );
433436
434437 play_audio (files [i ]);
435438 }
0 commit comments