/*
* This file is part of DisOrder.
- * Copyright (C) 2004-2012 Richard Kettlewell
+ * Copyright (C) 2004-2013 Richard Kettlewell
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include <getopt.h>
#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
+#if HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#if HAVE_SYS_UN_H
+# include <sys/un.h>
+#endif
#include <errno.h>
#include <locale.h>
#include <time.h>
#include <stddef.h>
-#include <unistd.h>
-#include <pcre.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#if HAVE_PCRE_H
+# include <pcre.h>
+#endif
#include <ctype.h>
-#include <gcrypt.h>
-#include <langinfo.h>
+#if HAVE_GCRYPT_H
+# include <gcrypt.h>
+#endif
+#if HAVE_LANGINFO_H
+# include <langinfo.h>
+#endif
#include "configuration.h"
#include "syscalls.h"
#include "log.h"
#include "queue.h"
#include "client.h"
-#include "wstat.h"
+#if !_WIN32
+# include "wstat.h"
+#endif
#include "table.h"
#include "charset.h"
#include "kvp.h"
#include "sink.h"
#include "mem.h"
#include "defs.h"
-#include "authorize.h"
+#if !_WIN32
+# include "authorize.h"
+#endif
#include "vector.h"
#include "version.h"
#include "dateparse.h"
if(q->scratched) xprintf(" scratched by %s\n",
nullcheck(utf82mb(q->scratched)));
else xprintf(" %s\n", playing_states[q->state]);
+#if _WIN32
+ if(q->wstat) xprintf(" %#x\n", q->wstat);
+#else
if(q->wstat) xprintf(" %s\n", wstat(q->wstat));
+#endif
}
static void cf_playing(char attribute((unused)) **argv) {
cf_somequeue(disorder_queue);
}
+#if _WIN32
+# define nl_langinfo(whatever) "ascii" /* hack */
+#endif
+
static void cf_quack(char attribute((unused)) **argv) {
if(!strcasecmp(nl_langinfo(CODESET), "utf-8")) {
#define TL "\xE2\x95\xAD"
static void cf_stats(char attribute((unused)) **argv) {
char **vec;
int nvec;
+ int n;
if(disorder_stats(getclient(), &vec, &nvec)) exit(EXIT_FAILURE);
- for(int n = 0; n < nvec; ++n)
+ for(n = 0; n < nvec; ++n)
xprintf("%s\n", nullcheck(utf82mb(vec[n])));
free_strings(nvec, vec);
}
return s[0] == '/';
}
+#if !_WIN32
static void cf_authorize(char **argv) {
authorize(getclient(), argv[0], argv[1]);
}
+#endif
static void cf_resolve(char **argv) {
char *track;
static void cf_playlists(char attribute((unused)) **argv) {
char **vec;
int nvec;
+ int n;
if(disorder_playlists(getclient(), &vec, &nvec))
exit(EXIT_FAILURE);
- for(int n = 0; n < nvec; ++n)
+ for(n = 0; n < nvec; ++n)
xprintf("%s\n", nullcheck(utf82mb(vec[n])));
free_strings(nvec, vec);
}
static void cf_playlist_get(char **argv) {
char **vec;
int nvec;
+ int n;
if(disorder_playlist_get(getclient(), argv[0], &vec, &nvec))
exit(EXIT_FAILURE);
- for(int n = 0; n < nvec; ++n)
+ for(n = 0; n < nvec; ++n)
xprintf("%s\n", nullcheck(utf82mb(vec[n])));
free_strings(nvec, vec);
}
"Adopt a randomly picked track" },
{ "allfiles", 1, 2, cf_allfiles, isarg_regexp, "DIR [~REGEXP]",
"List all files and directories in DIR" },
+#if !_WIN32
{ "authorize", 1, 2, cf_authorize, isarg_rights, "USERNAME [RIGHTS]",
"Authorize user USERNAME to connect" },
+#endif
{ "deluser", 1, 1, cf_deluser, 0, "USERNAME",
"Delete user USERNAME" },
{ "dirs", 1, 2, cf_dirs, isarg_regexp, "DIR [~REGEXP]",
const char *user = 0, *password = 0;
mem_init();
+ network_init();
+#if HAVE_PCRE_H
/* garbage-collect PCRE's memory */
pcre_malloc = xmalloc;
pcre_free = xfree;
+#endif
if(!setlocale(LC_CTYPE, "")) disorder_fatal(errno, "error calling setlocale");
if(!setlocale(LC_TIME, "")) disorder_fatal(errno, "error calling setlocale");
while((n = getopt_long(argc, argv, "+hVc:dHlNu:p:", options, 0)) >= 0) {
config->connect.af = -1;
n = optind;
optind = 1; /* for subsequent getopt calls */
+#if HAVE_GCRYPT_H
/* gcrypt initialization */
if(!gcry_check_version(NULL))
disorder_fatal(0, "gcry_check_version failed");
gcry_control(GCRYCTL_INIT_SECMEM, 0);
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
+#endif
/* accumulate command args */
while(n < argc) {
if((i = TABLE_FIND(commands, name, argv[n])) < 0)