char *readln(const char *prompt, playlist_player_t* player) { hre_t re_empty_line = hre_compile("^\\s*$",""); char* line; el_bool stop = el_false; while (!stop && (line = readline(prompt)) != NULL) { if (hre_has_match(re_empty_line, line)) { // do nothing } else { stop = el_true; } p_player(player); } if (line != NULL) { add_history(line); mc_take_control(line, strlen(line)+1); } else { line = mc_strdup(""); } return line; }
static int mp3splt(segmenter_t * S) { char *ext = getExt(S->segment.filename); //log_debug("mp3splt_split: entered"); mc_free(S->memory_block); S->size = -1; S->memory_block = NULL; #ifndef SEGMENT_USING_FILE FILE *f = open_memstream((char **)&S->memory_block, &S->size); #endif int begin_offset_in_hs = S->segment.begin_offset_in_ms / 10; int end_offset_in_hs = -1; if (S->segment.end_offset_in_ms >= 0) { end_offset_in_hs = S->segment.end_offset_in_ms / 10; } // Creating state splt_state *state = mp3splt_new_state(NULL); //log_debug("new state"); mp3splt_find_plugins(state); //log_debug("plugins found"); // Set split path and custom name mp3splt_set_path_of_split(state, "/tmp"); //log_debug("split path set"); mp3splt_set_int_option(state, SPLT_OPT_OUTPUT_FILENAMES, SPLT_OUTPUT_CUSTOM); //log_debug("custom split set"); // Set filename to split and pretend mode, for memory based splitting mp3splt_set_filename_to_split(state, S->segment.filename); //log_debug("filename to split set"); #ifndef SEGMENT_USING_FILE mp3splt_set_int_option(state, SPLT_OPT_PRETEND_TO_SPLIT, SPLT_TRUE); mp3splt_set_pretend_to_split_write_function(state, mp3splt_writer, (void *)f); //log_debug("pretend split and write function set"); #endif // Create splitpoints splt_point *point = mp3splt_point_new(begin_offset_in_hs, NULL); mp3splt_point_set_type(point, SPLT_SPLITPOINT); #ifdef SEGMENT_USING_FILE char buf[20]; sprintf(buf, "mp3cue%09d", ++splitnr); mp3splt_point_set_name(point, buf); #endif mp3splt_append_splitpoint(state, point); splt_point *skip = mp3splt_point_new(end_offset_in_hs, NULL); mp3splt_point_set_type(skip, SPLT_SKIPPOINT); mp3splt_append_splitpoint(state, skip); //log_debug("split points set"); // Append cuesheet tags and merge with existing { splt_tags *tags = mp3splt_tags_new(NULL); char *title = S->segment.title; char *artist = S->segment.artist; char *album = S->segment.album; char *performer = S->segment.album_artist; char year[20]; sprintf(year, "%d", S->segment.year); char *comment = S->segment.comment; char *genre = S->segment.genre; char track[20]; sprintf(track, "%d", S->segment.track); mp3splt_read_original_tags(state); //log_debug("original tags read"); mp3splt_tags_set(tags, SPLT_TAGS_ORIGINAL, "true", NULL); //log_debug("SPLT_TAGS_ORIGINAL set"); mp3splt_tags_set(tags, SPLT_TAGS_TITLE, title, SPLT_TAGS_ARTIST, artist, SPLT_TAGS_ALBUM, album, SPLT_TAGS_PERFORMER, performer, SPLT_TAGS_YEAR, year, SPLT_TAGS_COMMENT, comment, SPLT_TAGS_GENRE, genre, SPLT_TAGS_TRACK, track, NULL); //log_debug("tags set"); mp3splt_append_tags(state, tags); //log_debug("tag appended"); } // split the stuff int error = SPLT_OK; error = mp3splt_split(state); //log_debug("split done"); mp3splt_free_state(state); //log_debug("state freeed"); log_debug2("mp3splt_split: result=%d", error); #ifndef SEGMENT_USING_FILE fclose(f); mc_take_control(S->memory_block, S->size); //log_debug("memory file closed"); #endif if (error == SPLT_OK_SPLIT || error == SPLT_OK_SPLIT_EOF) { #ifdef SEGMENT_USING_FILE char fn[250]; sprintf(fn, "/tmp/%s.%s", buf, ext); FILE *f = fopen(fn, "rb"); FILE *g = open_memstream((char **)&S->memory_block, &S->size); int size; char fbuf[10240]; while ((size = fread(fbuf, 1, 10240, f)) > 0) { fwrite(fbuf, size, 1, g); } fclose(f); fclose(g); unlink(fn); #endif mc_free(ext); return SEGMENTER_OK; } else { mc_free(ext); return SEGMENTER_ERR_CREATE; } }