chiark / gitweb /
'collection' no longer requires an encoding to be specified (or a module).
authorRichard Kettlewell <richard@fanticule>
Sun, 30 Dec 2007 13:37:54 +0000 (13:37 +0000)
committerRichard Kettlewell <richard@fanticule>
Sun, 30 Dec 2007 13:37:54 +0000 (13:37 +0000)
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.

debian/changelog
doc/disorder_config.5.in
lib/configuration.c

index 484da6d6466da2c667bcee871e060f44850e10f6..1a39128b1a765fb32c39575510cfdc9db0bb64b2 100644 (file)
@@ -1,3 +1,9 @@
+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
index bd422d54f04c4129c3c46ee36defc5adead0f40d..ffabeb8d8d6dc273b5b73fc3e4256e29b90d6f2b 100644 (file)
@@ -287,18 +287,29 @@ You can also specify channels by number, if you know the right value.  NB that
 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.
 .IP
 .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.
+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
index e5dd120757ce536761c2dd0defe5a3f2d39d50c1..dde3d3c67a8bc30148c0012d5b9415d85165ed9f 100644 (file)
@@ -131,28 +131,55 @@ static int set_collections(const struct config_state *cs,
                           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;
   }
-  if(vec[2][0] != '/') {
+  /* 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);
   return 0;
 }
 
   return 0;
 }