This isn't quite as useful as it sounds as it depends on the server getting
the right LC_CTYPE, which it might well not do.
+disorder (2.0+) unstable; urgency=low
+
+ * Intermediate version number
+
+ -- Richard Kettlewell <rjk@greenend.org.uk> Sun, 30 Dec 2007 11:25:08 +0000
+
disorder (2.0) unstable; urgency=low
* DisOrder 2.0
disorder (2.0) unstable; urgency=low
* DisOrder 2.0
volume setting only works on OSS systems (including ALSA, via emulation).
.TP
.B collection \fIMODULE\fR \fIENCODING\fR \fIROOT\fR
volume setting only works on OSS systems (including ALSA, via emulation).
.TP
.B collection \fIMODULE\fR \fIENCODING\fR \fIROOT\fR
+.TP
+.B collection \fIMODULE\fR \fIROOT\fR
+.TP
+.B collection \fIROOT\fR
Define a collection of tracks.
.IP
\fIMODULE\fR defines which plugin module should be used for this
Define a collection of tracks.
.IP
\fIMODULE\fR defines which plugin module should be used for this
-collection. Use the supplied \fBfs\fR module for tracks that exists
-as ordinary files in the filesystem.
+collection. Use the supplied \fBfs\fR module for tracks that exist
+as ordinary files in the filesystem. If no \fIMODULE\fR is specified
+then \fBfs\fR is assumed.
+.IP
+\fIENCODING\fR defines the encoding of filenames in this collection. For
+\fBfs\fR this would be the encoding you use for filenames. Examples might be
+\fBiso-8859-1\fR or \fButf-8\fR. If no encoding is specified then the current
+locale's character encoding is used.
-\fIENCODING\fR defines the encoding of filenames in this collection.
-For \fBfs\fR this would be the encoding you use for filenames.
-Examples might be \fBiso-8859-1\fR or \fButf-8\fR.
+NB that this default depends on the locale the server runs in, which is not
+necessarily the same as that of ordinary users, depending how the system is
+configured. It's best to explicitly specify it to be certain.
.IP
\fIROOT\fR is the root in the filesystem of the filenames and is
.IP
\fIROOT\fR is the root in the filesystem of the filenames and is
-passed to the plugin module.
+passed to the plugin module. It must be an absolute path and should not
+end with a "/".
.TP
.B default_rights \fIRIGHTS\fR
Defines the set of rights given to new users. The argument is a
.TP
.B default_rights \fIRIGHTS\fR
Defines the set of rights given to new users. The argument is a
const struct conf *whoami,
int nvec, char **vec) {
struct collectionlist *cl;
const struct conf *whoami,
int nvec, char **vec) {
struct collectionlist *cl;
+ const char *root, *encoding, *module;
- if(nvec != 3) {
- error(0, "%s:%d: '%s' requires three arguments",
+ switch(nvec) {
+ case 1:
+ module = 0;
+ encoding = 0;
+ root = vec[0];
+ break;
+ case 2:
+ module = vec[0];
+ encoding = 0;
+ root = vec[1];
+ break;
+ case 3:
+ module = vec[0];
+ encoding = vec[1];
+ root = vec[2];
+ break;
+ case 0:
+ error(0, "%s:%d: '%s' requires at least one argument",
+ cs->path, cs->line, whoami->name);
+ return -1;
+ default:
+ error(0, "%s:%d: '%s' requires at most three arguments",
cs->path, cs->line, whoami->name);
return -1;
}
cs->path, cs->line, whoami->name);
return -1;
}
+ /* Sanity check root */
+ if(root[0] != '/') {
error(0, "%s:%d: collection root must start with '/'",
cs->path, cs->line);
return -1;
}
error(0, "%s:%d: collection root must start with '/'",
cs->path, cs->line);
return -1;
}
- if(vec[2][1] && vec[2][strlen(vec[2])-1] == '/') {
+ if(root[1] && root[strlen(root)-1] == '/') {
error(0, "%s:%d: collection root must not end with '/'",
cs->path, cs->line);
return -1;
}
error(0, "%s:%d: collection root must not end with '/'",
cs->path, cs->line);
return -1;
}
+ /* Defaults */
+ if(!module)
+ module = "fs";
+ if(!encoding)
+ encoding = nl_langinfo(CODESET);
cl = ADDRESS(cs->config, struct collectionlist);
++cl->n;
cl->s = xrealloc(cl->s, cl->n * sizeof (struct collection));
cl = ADDRESS(cs->config, struct collectionlist);
++cl->n;
cl->s = xrealloc(cl->s, cl->n * sizeof (struct collection));
- cl->s[cl->n - 1].module = xstrdup(vec[0]);
- cl->s[cl->n - 1].encoding = xstrdup(vec[1]);
- cl->s[cl->n - 1].root = xstrdup(vec[2]);
+ cl->s[cl->n - 1].module = xstrdup(module);
+ cl->s[cl->n - 1].encoding = xstrdup(encoding);
+ cl->s[cl->n - 1].root = xstrdup(root);