diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2013-12-02 18:42:33 +0100 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2013-12-02 18:42:33 +0100 |
commit | 62cf4f1ab7f29f156dd399516e2301dc78fc9bb6 (patch) | |
tree | f3481a17dbdf7a5bb659efe0a40474873cf03092 /package/mpd/patches | |
parent | 52a49601ba47b77d93d4856f2ee01e55755905f1 (diff) |
update mpdbox package collection, new lighttpd, kernel, php, mpd, mpc, libmpd, ffmpeg
Diffstat (limited to 'package/mpd/patches')
4 files changed, 102 insertions, 216 deletions
diff --git a/package/mpd/patches/patch-src_db_SimpleDatabasePlugin_cxx b/package/mpd/patches/patch-src_db_SimpleDatabasePlugin_cxx new file mode 100644 index 000000000..0f28de720 --- /dev/null +++ b/package/mpd/patches/patch-src_db_SimpleDatabasePlugin_cxx @@ -0,0 +1,91 @@ +--- mpd-0.18.5.orig/src/db/SimpleDatabasePlugin.cxx 2013-11-22 00:33:30.000000000 +0100 ++++ mpd-0.18.5/src/db/SimpleDatabasePlugin.cxx 2013-11-30 19:17:55.000000000 +0100 +@@ -35,6 +35,9 @@ + + #include <sys/types.h> + #include <errno.h> ++#include <sys/mount.h> ++#include <mntent.h> ++#include <string.h> + + static constexpr Domain simple_db_domain("simple_db"); + +@@ -95,8 +98,8 @@ SimpleDatabase::Check(Error &error) cons + return false; + } + +- /* Check if we can write to the directory */ +- if (!CheckAccess(dirPath, X_OK | W_OK)) { ++ /* Check if we can change into the directory */ ++ if (!CheckAccess(dirPath, X_OK)) { + const int e = errno; + const std::string dirPath_utf8 = dirPath.ToUTF8(); + error.FormatErrno(e, "Can't create db file in \"%s\"", +@@ -122,9 +125,9 @@ SimpleDatabase::Check(Error &error) cons + return false; + } + +- /* And check that we can write to it */ +- if (!CheckAccess(path, R_OK | W_OK)) { +- error.FormatErrno("Can't open db file \"%s\" for reading/writing", ++ /* And check that we can read it */ ++ if (!CheckAccess(path, R_OK)) { ++ error.FormatErrno("Can't open db file \"%s\" for reading", + path_utf8.c_str()); + return false; + } +@@ -281,6 +284,10 @@ SimpleDatabase::GetStats(const DatabaseS + bool + SimpleDatabase::Save(Error &error) + { ++ struct mntent *mnt; ++ int remount; ++ FILE *f; ++ + db_lock(); + + LogDebug(simple_db_domain, "removing empty directories from DB"); +@@ -293,6 +300,26 @@ SimpleDatabase::Save(Error &error) + + LogDebug(simple_db_domain, "writing DB"); + ++ remount = 0; ++ /* check if /data is mounted read-only */ ++ if ((f = setmntent("/proc/mounts", "r")) == NULL) ++ error.Format(simple_db_domain, "Checking /proc/mounts failed"); ++ ++ while ((mnt = getmntent(f)) != NULL) { ++ if (strcmp(mnt->mnt_dir, "/data") == 0 && ++ hasmntopt(mnt, MNTOPT_RO) != NULL) { ++ remount = 1; ++ } ++ } ++ endmntent(f); ++ ++ if (remount) { ++ if (mount("","/data",0,MS_REMOUNT,0)<0) { ++ error.Format(simple_db_domain, "Remounting /data rw failed"); ++ } ++ LogDebug(simple_db_domain, "Mounted /data successfully in read-write mode"); ++ } ++ + FILE *fp = FOpen(path, FOpenMode::WriteText); + if (!fp) { + error.FormatErrno("unable to write to db file \"%s\"", +@@ -310,6 +337,16 @@ SimpleDatabase::Save(Error &error) + + fclose(fp); + ++ if (remount) { ++ sync(); ++ if (mount("","/data",0,MS_REMOUNT|MS_RDONLY,0)<0) { ++ error.Format(simple_db_domain, "Remounting /data ro failed"); ++ } ++ LogDebug(simple_db_domain, "Mounted /data successfully in read-only mode"); ++ } ++ ++ LogDebug(simple_db_domain, "Successfully written database"); ++ + struct stat st; + if (StatFile(path, st)) + mtime = st.st_mtime; diff --git a/package/mpd/patches/patch-src_db_simple_db_plugin_c b/package/mpd/patches/patch-src_db_simple_db_plugin_c deleted file mode 100644 index 55ebba670..000000000 --- a/package/mpd/patches/patch-src_db_simple_db_plugin_c +++ /dev/null @@ -1,89 +0,0 @@ ---- mpd-0.17.6.orig/src/db/simple_db_plugin.c 2013-08-01 09:15:41.000000000 +0200 -+++ mpd-0.17.6/src/db/simple_db_plugin.c 2013-10-17 17:51:34.000000000 +0200 -@@ -28,6 +28,9 @@ - #include "conf.h" - #include "directory.h" - -+#include <sys/mount.h> -+#include <mntent.h> -+#include <string.h> - #include <sys/types.h> - #include <sys/stat.h> - #include <unistd.h> -@@ -128,8 +131,8 @@ simple_db_check(struct simple_db *db, GE - return false; - } - -- /* Check if we can write to the directory */ -- if (access(dirPath, X_OK | W_OK)) { -+ /* Check if we can change into the directory */ -+ if (access(dirPath, X_OK)) { - g_set_error(error_r, simple_db_quark(), errno, - "Can't create db file in \"%s\": %s", - dirPath, g_strerror(errno)); -@@ -159,9 +162,9 @@ simple_db_check(struct simple_db *db, GE - } - - /* And check that we can write to it */ -- if (access(db->path, R_OK | W_OK)) { -+ if (access(db->path, R_OK)) { - g_set_error(error_r, simple_db_quark(), errno, -- "Can't open db file \"%s\" for reading/writing: %s", -+ "Can't open db file \"%s\" for reading: %s", - db->path, g_strerror(errno)); - return false; - } -@@ -305,6 +308,9 @@ simple_db_save(struct db *_db, GError ** - { - struct simple_db *db = (struct simple_db *)_db; - struct directory *music_root = db->root; -+ struct mntent *mnt; -+ int remount; -+ FILE *f; - - db_lock(); - -@@ -317,6 +323,26 @@ simple_db_save(struct db *_db, GError ** - db_unlock(); - - g_debug("writing DB"); -+ -+ remount = 0; -+ /* check if /data is mounted read-only */ -+ if ((f = setmntent("/proc/mounts", "r")) == NULL) -+ g_message("Checking /proc/mounts failed"); -+ -+ while ((mnt = getmntent(f)) != NULL) { -+ if (strcmp(mnt->mnt_dir, "/data") == 0 && -+ hasmntopt(mnt, MNTOPT_RO) != NULL) { -+ remount = 1; -+ } -+ } -+ endmntent(f); -+ -+ if (remount) { -+ if (mount("","/data",0,MS_REMOUNT,0)<0) { -+ g_error("Remounting /data rw failed"); -+ } -+ g_message("Mounted /data successfully in read-write mode"); -+ } - - FILE *fp = fopen(db->path, "w"); - if (!fp) { -@@ -338,6 +364,16 @@ simple_db_save(struct db *_db, GError ** - - fclose(fp); - -+ if (remount) { -+ sync(); -+ if (mount("","/data",0,MS_REMOUNT|MS_RDONLY,0)<0) { -+ g_error("Remounting /data ro failed"); -+ } -+ g_message("Mounted /data successfully in read-only mode"); -+ } -+ -+ g_message("Successfully written database to file: %s", db->path); -+ - struct stat st; - if (stat(db->path, &st) == 0) - db->mtime = st.st_mtime; diff --git a/package/mpd/patches/patch-src_decoder_ffmpeg_decoder_plugin_c b/package/mpd/patches/patch-src_decoder_ffmpeg_decoder_plugin_c deleted file mode 100644 index e9568905c..000000000 --- a/package/mpd/patches/patch-src_decoder_ffmpeg_decoder_plugin_c +++ /dev/null @@ -1,127 +0,0 @@ ---- mpd-0.17.6.orig/src/decoder/ffmpeg_decoder_plugin.c 2013-08-04 14:20:16.000000000 +0200 -+++ mpd-0.17.6/src/decoder/ffmpeg_decoder_plugin.c 2013-10-15 16:26:29.000000000 +0200 -@@ -255,7 +255,8 @@ copy_interleave_frame2(uint8_t *dest, ui - static int - copy_interleave_frame(const AVCodecContext *codec_context, - const AVFrame *frame, -- uint8_t *buffer, size_t buffer_size) -+ uint8_t **output_buffer, -+ uint8_t **global_buffer, int *global_buffer_size) - { - int plane_size; - const int data_size = -@@ -263,18 +264,26 @@ copy_interleave_frame(const AVCodecConte - codec_context->channels, - frame->nb_samples, - codec_context->sample_fmt, 1); -- if (buffer_size < (size_t)data_size) -- /* buffer is too small - shouldn't happen */ -- return AVERROR(EINVAL); - - if (av_sample_fmt_is_planar(codec_context->sample_fmt) && - codec_context->channels > 1) { -- copy_interleave_frame2(buffer, frame->extended_data, -+ if(*global_buffer_size < data_size) { -+ av_freep(global_buffer); -+ -+ *global_buffer = (uint8_t*)av_malloc(data_size); -+ -+ if (!*global_buffer) -+ /* Not enough memory - shouldn't happen */ -+ return AVERROR(ENOMEM); -+ *global_buffer_size = data_size; -+ } -+ *output_buffer = *global_buffer; -+ copy_interleave_frame2(*output_buffer, frame->extended_data, - frame->nb_samples, - codec_context->channels, - av_get_bytes_per_sample(codec_context->sample_fmt)); - } else { -- memcpy(buffer, frame->extended_data[0], data_size); -+ *output_buffer = frame->extended_data[0]; - } - - return data_size; -@@ -285,7 +294,8 @@ static enum decoder_command - ffmpeg_send_packet(struct decoder *decoder, struct input_stream *is, - const AVPacket *packet, - AVCodecContext *codec_context, -- const AVRational *time_base) -+ const AVRational *time_base, -+ uint8_t **buffer, int *buffer_size) - { - if (packet->pts >= 0 && packet->pts != (int64_t)AV_NOPTS_VALUE) - decoder_timestamp(decoder, -@@ -299,8 +309,7 @@ ffmpeg_send_packet(struct decoder *decod - #endif - - #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,25,0) -- uint8_t aligned_buffer[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16]; -- const size_t buffer_size = sizeof(aligned_buffer); -+ uint8_t *output_buffer; - #else - /* libavcodec < 0.8 needs an aligned buffer */ - uint8_t audio_buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16]; -@@ -316,7 +325,7 @@ ffmpeg_send_packet(struct decoder *decod - packet_size > 0 && - #endif - cmd == DECODE_COMMAND_NONE) { -- int audio_size = buffer_size; -+ int audio_size = 0; - #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,25,0) - - AVFrame *frame = avcodec_alloc_frame(); -@@ -332,12 +341,11 @@ ffmpeg_send_packet(struct decoder *decod - if (len >= 0 && got_frame) { - audio_size = copy_interleave_frame(codec_context, - frame, -- aligned_buffer, -- buffer_size); -+ &output_buffer, -+ buffer, buffer_size); - if (audio_size < 0) - len = audio_size; -- } else if (len >= 0) -- len = -1; -+ } - - #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54, 28, 0) - avcodec_free_frame(&frame); -@@ -373,7 +381,7 @@ ffmpeg_send_packet(struct decoder *decod - continue; - - cmd = decoder_data(decoder, is, -- aligned_buffer, audio_size, -+ output_buffer, audio_size, - codec_context->bit_rate / 1000); - } - return cmd; -@@ -589,6 +597,9 @@ ffmpeg_decode(struct decoder *decoder, s - decoder_initialized(decoder, &audio_format, - input->seekable, total_time); - -+ uint8_t *interleaved_buffer = NULL; -+ int interleaved_buffer_size = 0; -+ - enum decoder_command cmd; - do { - AVPacket packet; -@@ -599,7 +610,8 @@ ffmpeg_decode(struct decoder *decoder, s - if (packet.stream_index == audio_stream) - cmd = ffmpeg_send_packet(decoder, input, - &packet, codec_context, -- &av_stream->time_base); -+ &av_stream->time_base, -+ &interleaved_buffer, &interleaved_buffer_size); - else - cmd = decoder_get_command(decoder); - -@@ -620,6 +632,8 @@ ffmpeg_decode(struct decoder *decoder, s - } - } while (cmd != DECODE_COMMAND_STOP); - -+ av_freep(&interleaved_buffer); -+ - avcodec_close(codec_context); - #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(53,17,0) - avformat_close_input(&format_context); diff --git a/package/mpd/patches/patch-src_thread_Id_hxx b/package/mpd/patches/patch-src_thread_Id_hxx new file mode 100644 index 000000000..dabee4007 --- /dev/null +++ b/package/mpd/patches/patch-src_thread_Id_hxx @@ -0,0 +1,11 @@ +--- mpd-0.18.5.orig/src/thread/Id.hxx 2013-11-18 23:50:46.000000000 +0100 ++++ mpd-0.18.5/src/thread/Id.hxx 2013-11-29 20:50:36.000000000 +0100 +@@ -84,7 +84,7 @@ public: + #ifdef WIN32 + return id == other.id; + #else +- return ::pthread_equal(id, other.id); ++ return pthread_equal(id, other.id); + #endif + } + |