aboutsummaryrefslogtreecommitdiffstats
path: root/src (follow)
Commit message (Collapse)AuthorAgeFilesLines
* util/UTF8: new libraryMax Kellermann2014-10-102-0/+339
|
* TagString: return WritableBuffer<char>Max Kellermann2014-10-103-24/+26
|
* TagString: use strndup() for unterminated stringMax Kellermann2014-10-101-1/+1
| | | | Fixes buffer overflow bug.
* TagString: remove ISO-Latin-1 fallbackMax Kellermann2014-10-101-14/+1
| | | | | | | | MPD handles all strings in UTF-8 internally. Those decoders which read Latin-1 tags are supposed to implement the conversion, instead of passing Latin-1 to TagBuilder::AddItem(). FixTagString() is simply the wrong place to do that, and hard-coding Latin-1 is kind of arbitrary.
* fs/Traits: use value_typeMax Kellermann2014-10-101-4/+4
|
* Main: run the OS X native event loopnanotech2014-10-103-0/+50
|
* storage/nfs: use the libnfs async APIMax Kellermann2014-10-093-49/+397
| | | | Share the NFS connection with the NFS input plugin.
* lib/nfs/Connection: reduce Error instance allocationsMax Kellermann2014-10-091-3/+2
|
* lib/nfs/Glue: add assertionMax Kellermann2014-10-091-0/+1
|
* StoragePlugin: pass EventLoop to constructorMax Kellermann2014-10-099-14/+23
|
* storage/nfs: move code to class MemoryStorageDirectoryReaderMax Kellermann2014-10-073-73/+150
| | | | | | Read all directory entries into memory and close the struct nfsdir before returning the StorageDirectoryReader instance. This is what libnfs does, anyway.
* storage/nfs: move code to Copy()Max Kellermann2014-10-071-18/+30
|
* lib/nfs/Connection: add methods {Open,Read,Close}Directory()Max Kellermann2014-10-072-0/+53
|
* lib/nfs/Connection: add method Stat(path)Max Kellermann2014-10-072-0/+33
|
* lib/nfs/Connection: make GetEventLoop() publicMax Kellermann2014-10-061-4/+4
|
* lib/nfs/Base: kludge to reduce number of NFS mountsMax Kellermann2014-10-054-7/+127
| | | | | | | Creating a NfsStorage sets its own export_name as the "base". Now NfsFileReader can use this information to derive the export_name to be mounted, instead of guessing. This solves the "too many connection" problem on the NFS server while updating the database.
* PlaylistStream: use OpenLocalInputStream()Max Kellermann2014-10-021-5/+3
|
* PlaylistStream: pass Path instance to playlist_open_path()Max Kellermann2014-10-023-11/+19
| | | | | Convert filesystem charset to UTF-8 for playlist_list_open_uri(). This fixes one of many remaining charset bugs.
* archive/bzip2: use OpenLocalInputStream()Max Kellermann2014-10-021-2/+2
|
* input/Open: use OpenLocalInputStream()Max Kellermann2014-10-025-33/+34
| | | | | | | Make the "open" method of plugins "file" and "archive" dummy methods that always fail. Instead, let InputStream::Open() hard-code access to these two plugins by using OpenLocalInputStream(). This allows simplifyin the algorithm for falling back to probing archive plugins.
* DecoderThread: use OpenLocalInputStream() for local filesMax Kellermann2014-10-021-1/+20
|
* TagFile: use OpenLocalInputStream()Max Kellermann2014-10-021-3/+4
|
* input/LocalOpen: new library for opening local filesMax Kellermann2014-10-022-0/+86
| | | | Combines the "file" and the "archive" input plugins.
* input/archive: export function OpenArchiveInputStream()Max Kellermann2014-10-022-16/+33
|
* input/file: export function OpenFileInputStream()Max Kellermann2014-10-022-13/+37
|
* input/file: generate Error when errno==ENOENTMax Kellermann2014-10-021-1/+1
| | | | | This special case was useless. Fixes the dreaded "Unrecognized URI" error message when a file does not exist.
* input/file: make the "fd" attribute "const"Max Kellermann2014-10-021-1/+1
|
* input/file: make variables more localMax Kellermann2014-10-021-6/+3
|
* storage: remove redundant "virtual" keywordsMax Kellermann2014-10-025-38/+34
| | | | "override" implies "virtual".
* input/file: convert to classMax Kellermann2014-10-021-1/+2
|
* storage/Interface: include cleanupMax Kellermann2014-10-017-2/+11
|
* lib/nfs/FileReader: postpone the nfs_close_async() callMax Kellermann2014-10-014-6/+92
| | | | | | If an async opertion is in progress, nfs_close_async() will make libnfs crash because the RPC callback will dereference an object that was freed by nfs_close_async().
* lib/nfs/Connection: fix memory leak when cancelling Open()Max Kellermann2014-10-012-5/+23
| | | | Close the newly allocated file handle passed to the callback.
* lib/nfs/Connection: remove MutexMax Kellermann2014-10-012-18/+12
| | | | | All locks are currenly held from only a single thread (the IOThread) and thus we don't need the Mutex.
* lib/nfs/Connection: add method GetEventLoop()Max Kellermann2014-10-012-1/+5
|
* lib/nfs/Connection: remove obsolete flag postponed_destroyMax Kellermann2014-10-012-18/+2
|
* lib/nfs/Connection: remove deprecated move constructor workaroundMax Kellermann2014-10-011-16/+0
| | | | | Not used anymore because NfsManager now uses boost::intrusive::set instead of std::map.
* storage/nfs: make a few attributes "const"Max Kellermann2014-10-011-3/+3
|
* lib/nfs/Manager: use boost::intrusive::mapMax Kellermann2014-10-012-37/+78
| | | | | Reduce overhead for storing the key twice, and more overhead while looking up the connection to remove it after a failure.
* lib/nfs/Glue: add assertionMax Kellermann2014-10-011-0/+4
|
* lib/nfs/Glue: destruct the NfsManager in the I/O threadMax Kellermann2014-10-013-5/+8
| | | | | This allows eliminating the indirection code from the NfsConnection destructor.
* lib/nfs/Glue: eliminate class NfsGlueMax Kellermann2014-10-011-17/+1
| | | | It's just a useless wrapper for class NfsManager.
* lib/nfs/Cancellable: use boost::intrusive::listMax Kellermann2014-10-013-40/+18
| | | | | Reduce Remove() overhead because we don't have to walk the list to find an iterator by reference.
* Tag: support "AlbumSort"Max Kellermann2014-09-293-0/+5
| | | | | The new tag is supported by all decoders that use the tag name table, and the ID3v2 tag "TSOA" maps to it.
* storage/nfs: convert file name to UTF-8Max Kellermann2014-09-281-8/+30
| | | | | Assume the configured filesystem character set is also used by the NFS server.
* storage/nfs: use string::append() instead of string::insert()Max Kellermann2014-09-281-3/+2
| | | | | Swap the order of adding the URI and the slash, because appending is cheaper than inserting.
* storage/nfs: move code to UriToNfsPath()Max Kellermann2014-09-281-6/+13
|
* fs/AllocatedPath: add method Steal()Max Kellermann2014-09-281-0/+8
|
* fs/AllocatedPath: API documentation grammar fixesMax Kellermann2014-09-281-5/+5
|
* Add MusicBrainz' Release Track Id tagWieland Hoffmann2014-09-275-0/+11
| | | | | | | | | | The Release Track Id uniquely identifies a recording on a release - that is, even if a recording appears twice on a release (meaning that the combination of recording and release id are not enough to figure out which one it is), the release track id will allow differentiating the two. The tag names are taken from https://musicbrainz.org/doc/MusicBrainz_Picard/Tags/Mapping