Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <stdlib.h>
00022 #include <unistd.h>
00023 #include <pwd.h>
00024 #include <time.h>
00025 #include <errno.h>
00026
00027 #include "xmms_configuration.h"
00028 #include "xmmsc/xmmsc_util.h"
00029
00030
00031
00032
00033
00034 static const char *
00035 xdg_dir_get (const char *env, const char *default_dir, char *buf, int len)
00036 {
00037 struct passwd *pw;
00038 char *home;
00039
00040 if (!buf || len <= 0)
00041 return NULL;
00042
00043 home = getenv (env);
00044
00045 if (home && *home) {
00046 snprintf (buf, len, "%s/xmms2", home);
00047
00048 return buf;
00049 }
00050
00051 pw = getpwuid (getuid ());
00052 if (!pw)
00053 return NULL;
00054
00055 snprintf (buf, len, "%s/%s", pw->pw_dir, default_dir);
00056
00057 return buf;
00058 }
00059
00060
00061
00062
00063
00064
00065
00066 const char *
00067 xmms_usercachedir_get (char *buf, int len)
00068 {
00069 return xdg_dir_get ("XDG_CACHE_HOME", USERCACHEDIR, buf, len);
00070 }
00071
00072
00073
00074
00075
00076
00077
00078
00079 const char *
00080 xmms_userconfdir_get (char *buf, int len)
00081 {
00082 return xdg_dir_get ("XDG_CONFIG_HOME", USERCONFDIR, buf, len);
00083 }
00084
00085
00086
00087
00088
00089
00090
00091
00092 const char *
00093 xmms_fallback_ipcpath_get (char *buf, int len)
00094 {
00095 struct passwd *pw;
00096
00097 pw = getpwuid (getuid ());
00098 if (!pw || !pw->pw_name) {
00099 return NULL;
00100 }
00101
00102 snprintf (buf, len, "unix:///tmp/xmms-ipc-%s", pw->pw_name);
00103
00104 return buf;
00105 }
00106
00107
00108
00109
00110
00111
00112
00113 bool
00114 xmms_sleep_ms (int n)
00115 {
00116 struct timespec sleeptime;
00117
00118 sleeptime.tv_sec = (time_t) (n / 1000);
00119 sleeptime.tv_nsec = (n % 1000) * 1000000;
00120
00121 while (nanosleep (&sleeptime, &sleeptime) == -1) {
00122 if (errno != EINTR) {
00123 return false;
00124 }
00125 }
00126
00127 return true;
00128 }