1. 26 Aug, 2008 2 commits
  2. 14 Apr, 2008 1 commit
  3. 12 Apr, 2008 1 commit
    • Max Kellermann's avatar
      clean up CPP includes · c89b358c
      Max Kellermann authored
      Try to only include headers which are really needed.  We should
      particularly check all "headers including other headers".  The
      long-term goal is to have a manageable, small API for plugins
      (decoders, output) without so many mpd internals cluttering the
      namespace.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7319 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      c89b358c
  4. 26 Mar, 2008 1 commit
  5. 05 Feb, 2008 1 commit
  6. 26 Jan, 2008 5 commits
    • Eric Wong's avatar
      Revert the queue implementation and commands · 688289b2
      Eric Wong authored
      It's too ugly and broken (both technically and usability-wise)
      to be worth supporting in any stable release.
      
      In one sentence: The queue is a very crippled version of the
      playlist that takes precedence over the normal playlist.
      
      How is it crippled?
      
      * The "queueid" command only allows the queuing of songs
      ALREADY IN THE PLAYLIST!  This promotes having the entire mpd
      database of songs in the playlist, which is a stupid practice
      to begin with.
      
      * It doesn't allow for meaningful rearranging and movement
      of songs within the queue.  To move a song, you'd need to
      dequeue and requeue it (and other songs on the list).
      Why?  The playlist already allows _all_ these features
      and shows everything a client needs to know about the ordering
      of songs in a _single_ command!
      
      * Random was a stupid idea to begin with and unfortunately
      we're stuck supporting it since we've always had it.  Users
      should learn to use "shuffle" instead and not look at their
      playlists.  Implementing queue because we have the problem of
      random is just a bandage fix and digging ourselves a new hole.
      
      This protocol addition was never in a stable release of mpd, so
      reverting it will only break things for people following trunk;
      which I'm not too worried about.  I am however worried about
      long-term support of this misfeature, so I'm removing it.
      
      Additionally, there are other points:
      
      * It's trivially DoS-able:
      
      (while true; do echo queueid $song_id; done) | nc $MPD_HOST $MPD_PORT
      
      The above commands would cause the queue to become infinitely
      expanding, taking up all available memory in the system.  The
      mpd playlist was implemented as an array with a fixed (but
      configurable) size limit for this reason.
      
      * It's not backwards-compatible.  All clients would require
      upgrades (and additional complexity) to even know what the
      next song in the playlist is.  mpd is a shared architecture,
      and we should not violate the principle of least astonishment
      here.
      
      This removes the following commands:
      queueid, dequeue, queueinfo
      
      Additionally, the status field of "playlistqueue: " is removed
      from the status command.
      
      While this DoS is trivial to fix, the design is simply too
      broken to ever support in a real release.
      
      The overloading of the "addid" command and the allowing of
      negative numbers to be used as offsets is far more flexible.
      
      This improved "addid" is completely backwards-compatible with
      all clients, and does not require clients to have UI changes or
      run additional commands to display the queue.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7155 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      688289b2
    • Eric Wong's avatar
      command: allow "addid" command to take an optional second argument, position · 9eee1a81
      Eric Wong authored
      This will allow "addid \"song_url\" <pos>" to atomically insert a
      song at any given playlist position.
      
      If the add succeeds, but the actual movement fails (due to
      invalid position), then the song_id will be deleted before
      the command returns back to the client, and the client
      will get an error response.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7151 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      9eee1a81
    • Eric Wong's avatar
      command: cleanup integer argument validation for commands · 2889b576
      Eric Wong authored
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7150 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      2889b576
    • Eric Wong's avatar
      addToPlaylist/addSongToPlaylist: printId argument changed to added_id · 2f0e5bfd
      Eric Wong authored
      Instead of printing out the Id from playlist.c, instead set
      the integer that added_id poitns to if added_id is non-NULL.
      
      This makes the API cleaner and will allow us to use additional
      commands to manipulate the newly-added song_id.  Callers
      (handleAddId) that relied on printId to print it to the given
      fd have now been modified to print the ID at a higher-level;
      making playlist.c less-dependent on protocol details.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7149 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      2f0e5bfd
    • Max Kellermann's avatar
      fixed -Wshadow warnings · 07adb14e
      Max Kellermann authored
      Signed-off-by: 's avatarEric Wong <normalperson@yhbt.net>
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7143 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      07adb14e
  7. 03 Jan, 2008 1 commit
    • Eric Wong's avatar
      Cleanup #includes of standard system headers and put them in one place · cb8f1af3
      Eric Wong authored
      This will make refactoring features easier, especially now that
      pthreads support and larger refactorings are on the horizon.
      
      Hopefully, this will make porting to other platforms (even
      non-UNIX-like ones for masochists) easier, too.
      
      os_compat.h will house all the #includes for system headers
      considered to be the "core" of MPD.  Headers for optional
      features will be left to individual source files.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@7130 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      cb8f1af3
  8. 26 Sep, 2007 1 commit
  9. 24 May, 2007 2 commits
  10. 16 May, 2007 1 commit
  11. 25 Apr, 2007 1 commit
  12. 08 Apr, 2007 2 commits
  13. 05 Apr, 2007 1 commit
  14. 31 Mar, 2007 1 commit
  15. 24 Feb, 2007 1 commit
  16. 14 Jan, 2007 1 commit
  17. 11 Dec, 2006 1 commit
  18. 07 Dec, 2006 1 commit
  19. 06 Oct, 2006 2 commits
  20. 26 Aug, 2006 2 commits
    • Eric Wong's avatar
      Replace strdup and {c,re,m}alloc with x* variants to check for OOM errors · 90847fc8
      Eric Wong authored
      I'm checking for zero-size allocations and assert()-ing them,
      so we can more easily get backtraces and debug problems, but we'll
      also allow -DNDEBUG people to live on the edge if they wish.
      
      We do not rely on errno when checking for OOM errors because
      some implementations of malloc do not set it, and malloc
      is commonly overridden by userspace wrappers.
      
      I've spent some time looking through the source and didn't find any
      obvious places where we would explicitly allocate 0 bytes, so we
      shouldn't trip any of those assertions.
      
      We also avoid allocating zero bytes because C libraries don't
      handle this consistently (some return NULL, some not); and it's
      dangerous either way.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@4690 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      90847fc8
    • Eric Wong's avatar
      command.c: rerun mpd-indent.sh, no code changes · 45f28394
      Eric Wong authored
      leave out initCommands to keep jat happy, and keep labels
      at the left hand side
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@4687 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      45f28394
  21. 20 Aug, 2006 1 commit
  22. 07 Aug, 2006 3 commits
  23. 06 Aug, 2006 2 commits
  24. 30 Jul, 2006 4 commits
    • Eric Wong's avatar
      gcc signedness and sparse fixes · a80168a1
      Eric Wong authored
      git-svn-id: https://svn.musicpd.org/mpd/trunk@4489 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      a80168a1
    • Eric Wong's avatar
      commandError() cleanups, fixup gcc checks · e86fd65c
      Eric Wong authored
      stripped binary size reduced by 9k on my machine from making
      commandError a function.  We'll print out error messages slightly
      slower before, but the smaller binary is more than worth it.
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@4488 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      e86fd65c
    • Eric Wong's avatar
      command: fix find/search commands from the malloc reduction patch · b38c3fa1
      Eric Wong authored
      The most we ever use is for search/find, and that limits it to the
      number of tags we can have.  Add one for the command, and one extra
      to catch errors clients may send us.
      
      Thanks to Qball for reporting this bug
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@4486 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      b38c3fa1
    • Eric Wong's avatar
      interface/connection malloc reductions from mpd-ke · 4cf5d04c
      Eric Wong authored
      This patch massively reduces the amount of heap allocations at
      the interface/command layer.  Most commands with minimal output
      should not allocate memory from the heap at all.  Things like
      repeatedly polling status, currentsong, and volume changes
      should be faster as a result, and more importantly, not a source
      of memory fragmentation.
      
      These changes should be safe in that there's no way for a
      remote-client to corrupt memory or otherwise do bad stuff to
      MPD, but an extra set of eyes to review would be good.  Of
      course there's never any warranty :)
      
      No longer do we use FILE * structures in the interface, which means
      we don't have to allocate any new memory for most connections.
      
      Now, before you go on about losing the buffering that FILE *
      +implies+, remember that myfprintf() never took advantage of
      any of the stdio buffering features.
      
      To reduce the diff and make bugs easier to spot in the diff,
      I've kept myfprintf in places where we write to files (and not
      network interfaces).  Expect myfprintf to go away entirely soon
      (we'll use fprintf for writing regular files).
      
      git-svn-id: https://svn.musicpd.org/mpd/trunk@4483 09075e82-0dd4-0310-85a5-a0d7c8717e4f
      4cf5d04c
  25. 29 Jul, 2006 1 commit