aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TODO2
-rw-r--r--src/audio.c3
-rw-r--r--src/directory.c7
-rw-r--r--src/log.c41
-rw-r--r--src/log.h11
-rw-r--r--src/main.c8
-rw-r--r--src/myfprintf.h1
-rw-r--r--src/path.c18
-rw-r--r--src/utils.c20
-rw-r--r--src/utils.h3
-rw-r--r--src/volume.c30
11 files changed, 106 insertions, 38 deletions
diff --git a/TODO b/TODO
index 5f8dc8c93..11994d6a9 100644
--- a/TODO
+++ b/TODO
@@ -1,7 +1,5 @@
*) put some sort of error reporting for streaming/inputStream!
-*) Fix charset errors so they don't goto stderr/out
-
Post-1.0
--------
1) crosslink "list" stuff, for example, artists are crosslinked to alubms and
diff --git a/src/audio.c b/src/audio.c
index afea52734..e677f8768 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -256,7 +256,7 @@ int playAudio(char * playChunk, int size) {
int send;
if(audio_device==NULL) {
- ERROR("trying to play w/ the audio device being open!\n");
+ ERROR("trying to play w/o the audio device being open!\n");
return -1;
}
@@ -302,4 +302,3 @@ void audioError() {
}
#endif
}
-/* vim:set shiftwidth=4 tabstop=8 expandtab: */
diff --git a/src/directory.c b/src/directory.c
index 959ade487..0d1b0ee2b 100644
--- a/src/directory.c
+++ b/src/directory.c
@@ -931,7 +931,7 @@ int readDirectoryDB() {
char * tempCharset;
if(foundFsCharset) {
- ERROR("already found "
+ WARNING("already found "
"fs charset in db\n");
exit(EXIT_FAILURE);
}
@@ -944,11 +944,11 @@ int readDirectoryDB() {
getConf()[CONF_FS_CHARSET]) &&
strcmp(fsCharset,tempCharset))
{
- ERROR("Using \"%s\" for the "
+ WARNING("Using \"%s\" for the "
"filesystem charset "
"instead of \"%s\"\n",
fsCharset,tempCharset);
- ERROR("maybe you need to "
+ WARNING("maybe you need to "
"recreate the db?\n");
setFsCharset(fsCharset);
}
@@ -1275,4 +1275,3 @@ Song * getSongFromDB(char * file) {
time_t getDbModTime() {
return directory_dbModTime;
}
-/* vim:set shiftwidth=4 tabstop=8 expandtab: */
diff --git a/src/log.c b/src/log.c
index bdc7cf935..835fa9e00 100644
--- a/src/log.c
+++ b/src/log.c
@@ -20,10 +20,16 @@
#include "conf.h"
#include "myfprintf.h"
+#include "utils.h"
+#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
int logLevel = LOG_LEVEL_LOW;
+short warningFlushed = 0;
+
+static char * warningBuffer = NULL;
void initLog() {
if(strcmp(getConf()[CONF_LOG_LEVEL],"default")==0) {
@@ -37,4 +43,37 @@ void initLog() {
}
else ERROR("unknown log level \"%s\"\n",getConf()[CONF_LOG_LEVEL]);
}
-/* vim:set shiftwidth=4 tabstop=8 expandtab: */
+
+#define BUFFER_LENGTH 4096
+
+void bufferWarning(char * format, ... ) {
+ va_list arglist;
+ char temp[BUFFER_LENGTH+1];
+
+ memset(temp, 0, BUFFER_LENGTH+1);
+
+ va_start(arglist, format);
+
+ vsnprintf(temp, BUFFER_LENGTH, format, arglist);
+
+ warningBuffer = appendToString(warningBuffer, temp);
+
+ va_end(arglist);
+}
+void flushWarningLog() {
+ char * s;
+
+ if(warningBuffer == NULL) return;
+
+ s = strtok(warningBuffer, "\n");
+ while ( s != NULL ) {
+ myfprintf(stderr, "%s\n", s);
+
+ s = strtok(NULL, "\n");
+ }
+
+ free(warningBuffer);
+ warningBuffer = NULL;
+
+ warningFlushed = 1;
+}
diff --git a/src/log.h b/src/log.h
index ccb407a07..3bda616b6 100644
--- a/src/log.h
+++ b/src/log.h
@@ -28,6 +28,7 @@
#define LOG_LEVEL_DEBUG 2
extern int logLevel;
+extern short warningFlushed;
#define ERROR(...) myfprintf(stderr, __VA_ARGS__)
@@ -40,7 +41,15 @@ extern int logLevel;
#define DEBUG(...) if(logLevel>=LOG_LEVEL_DEBUG) \
myfprintf(stdout, __VA_ARGS__)
+#define WARNING(...) { \
+ if(warningFlushed) myfprintf(stderr, __VA_ARGS__); \
+ else bufferWarning(__VA_ARGS__); \
+}
+
void initLog();
+void bufferWarning(char * format, ... );
+
+void flushWarningLog();
+
#endif
-/* vim:set shiftwidth=4 tabstop=8 expandtab: */
diff --git a/src/main.c b/src/main.c
index 58eb8d98a..c65d00e1c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -289,7 +289,10 @@ void changeToUser(Options * options) {
}
void openLogFiles(Options * options, FILE ** out, FILE ** err) {
- if(options->stdOutput) return;
+ if(options->stdOutput) {
+ flushWarningLog();
+ return;
+ }
if(NULL==(*out=fopen(options->logFile,"a"))) {
ERROR("problem opening file \"%s\" for writing\n",
@@ -316,6 +319,7 @@ void openDB(Options * options, char * argv0) {
argv0);
exit(EXIT_FAILURE);
}
+ flushWarningLog();
initMp3Directory();
if(writeDirectoryDB()<0) {
ERROR("problem opening db for reading or writing\n");
@@ -324,6 +328,7 @@ void openDB(Options * options, char * argv0) {
if(options->createDB) exit(EXIT_SUCCESS);
}
if(options->updateDB) {
+ flushWarningLog();
updateMp3Directory();
exit(EXIT_SUCCESS);
}
@@ -379,6 +384,7 @@ void setupLogOutput(Options * options, FILE * out, FILE * err) {
myfprintfStdLogMode(out, err, options->logFile,
options->errorFile);
+ flushWarningLog();
}
/* lets redirect stdin to dev null as a work around for libao bug */
diff --git a/src/myfprintf.h b/src/myfprintf.h
index 31d1c88c0..ad42ec794 100644
--- a/src/myfprintf.h
+++ b/src/myfprintf.h
@@ -31,4 +31,3 @@ void myfprintf(FILE * fp, char * format, ... );
int myfprintfCloseAndOpenLogFile();
#endif
-/* vim:set shiftwidth=4 tabstop=8 expandtab: */
diff --git a/src/path.c b/src/path.c
index d7b08d6be..61c9f7040 100644
--- a/src/path.c
+++ b/src/path.c
@@ -86,13 +86,13 @@ void setFsCharset(char * charset) {
DEBUG("setFsCharset: fs charset is: %s\n",fsCharset);
if(setCharSetConversion("UTF-8",fsCharset)!=0) {
- ERROR("fs charset conversion problem: "
+ WARNING("fs charset conversion problem: "
"not able to convert from \"%s\" to \"%s\"\n",
fsCharset,"UTF-8");
error = 1;
}
if(setCharSetConversion(fsCharset,"UTF-8")!=0) {
- ERROR("fs charset conversion problem: "
+ WARNING("fs charset conversion problem: "
"not able to convert from \"%s\" to \"%s\"\n",
"UTF-8",fsCharset);
error = 1;
@@ -100,7 +100,7 @@ void setFsCharset(char * charset) {
if(error) {
free(fsCharset);
- ERROR("setting fs charset to ISO-8859-1!\n");
+ WARNING("setting fs charset to ISO-8859-1!\n");
fsCharset = strdup("ISO-8859-1");
}
}
@@ -145,28 +145,28 @@ void initPaths(char * playlistDirArg, char * musicDirArg) {
originalLocale = strdup(originalLocale);
if(!(currentLocale = setlocale(LC_CTYPE,""))) {
- ERROR("problems setting current locale with "
+ WARNING("problems setting current locale with "
"setlocale()\n");
}
else {
if(strcmp(currentLocale,"C")==0 ||
strcmp(currentLocale,"POSIX")==0)
{
- ERROR("current locale is \"%s\"\n",
+ WARNING("current locale is \"%s\"\n",
currentLocale);
}
else if((temp = nl_langinfo(CODESET))) {
charset = strdup(temp);
}
- else ERROR("problems getting charset for locale\n");
+ else WARNING("problems getting charset for locale\n");
if(!setlocale(LC_CTYPE,originalLocale)) {
- ERROR("problems resetting locale with setlocale()\n");
+ WARNING("problems resetting locale with setlocale()\n");
}
}
free(originalLocale);
}
- else ERROR("problems getting locale with setlocale()\n");
+ else WARNING("problems getting locale with setlocale()\n");
#endif
#endif
@@ -175,7 +175,7 @@ void initPaths(char * playlistDirArg, char * musicDirArg) {
free(charset);
}
else {
- ERROR("setting filesystem charset to ISO-8859-1\n");
+ WARNING("setting filesystem charset to ISO-8859-1\n");
setFsCharset("ISO-8859-1");
}
}
diff --git a/src/utils.c b/src/utils.c
index ece410b2c..fbcf3d9dd 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -70,4 +70,22 @@ int ipv6Supported() {
return 0;
}
-/* vim:set shiftwidth=4 tabstop=8 expandtab: */
+char * appendToString(char * dest, const char * src) {
+ int destlen;
+ int srclen = strlen(src);
+
+ if(dest == NULL) {
+ dest = malloc(srclen+1);
+ memset(dest, 0, srclen+1);
+ destlen = 0;
+ }
+ else {
+ destlen = strlen(dest);
+ dest = realloc(dest, destlen+srclen+1);
+ }
+
+ memcpy(dest+destlen, src, srclen);
+ dest[destlen+srclen] = '\0';
+
+ return dest;
+}
diff --git a/src/utils.h b/src/utils.h
index fd03915f9..545f1653d 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -33,5 +33,6 @@ void my_usleep(long usec);
int ipv6Supported();
+char * appendToString(char * dest, const char * src);
+
#endif
-/* vim:set shiftwidth=4 tabstop=8 expandtab: */
diff --git a/src/volume.c b/src/volume.c
index 42f72ba48..4a1370b2f 100644
--- a/src/volume.c
+++ b/src/volume.c
@@ -68,7 +68,7 @@ int prepOssMixer(char * device) {
int devmask = 0;
if((volume_ossFd = open(device,O_RDONLY))<0) {
- ERROR("unable to open oss mixer \"%s\"\n",device);
+ WARNING("unable to open oss mixer \"%s\"\n",device);
return -1;
}
@@ -78,7 +78,7 @@ int prepOssMixer(char * device) {
int i,j;
if(ioctl(volume_ossFd,SOUND_MIXER_READ_DEVMASK,&devmask)<0) {
- ERROR("errors getting read_devmask for oss mixer\n");
+ WARNING("errors getting read_devmask for oss mixer\n");
close(volume_ossFd);
return -1;
}
@@ -96,13 +96,13 @@ int prepOssMixer(char * device) {
}
if(i>=SOUND_MIXER_NRDEVICES) {
- ERROR("mixer control \"%s\" not found\n",
+ WARNING("mixer control \"%s\" not found\n",
getConf()[CONF_MIXER_CONTROL]);
close(volume_ossFd);
return -1;
}
else if(!( ( 1 << i ) & devmask )) {
- ERROR("mixer control \"%s\" not usable\n",
+ WARNING("mixer control \"%s\" not usable\n",
getConf()[CONF_MIXER_CONTROL]);
close(volume_ossFd);
return -1;
@@ -122,7 +122,7 @@ int getOssVolumeLevel() {
int left, right, level;
if(ioctl(volume_ossFd,MIXER_READ(volume_ossControl),&level) < 0) {
- ERROR("unable to read volume\n");
+ WARNING("unable to read volume\n");
return -1;
}
@@ -130,7 +130,7 @@ int getOssVolumeLevel() {
right = (level & 0xff00) >> 8;
if(left!=right) {
- ERROR("volume for left and right is not the same, \"%i\" and "
+ WARNING("volume for left and right is not the same, \"%i\" and "
"\"%i\"\n",left,right);
}
@@ -174,27 +174,27 @@ int prepAlsaMixer(char * card) {
char * controlName = VOLUME_MIXER_ALSA_CONTROL_DEFAULT;
if((err = snd_mixer_open(&volume_alsaMixerHandle,0))<0) {
- ERROR("problems opening alsa mixer: %s\n",snd_strerror(err));
+ WARNING("problems opening alsa mixer: %s\n",snd_strerror(err));
return -1;
}
if((err = snd_mixer_attach(volume_alsaMixerHandle,card))<0) {
snd_mixer_close(volume_alsaMixerHandle);
- ERROR("problems problems attaching alsa mixer: %s\n",
+ WARNING("problems problems attaching alsa mixer: %s\n",
snd_strerror(err));
return -1;
}
if((err = snd_mixer_selem_register(volume_alsaMixerHandle,NULL,NULL))<0) {
snd_mixer_close(volume_alsaMixerHandle);
- ERROR("problems snd_mixer_selem_register'ing: %s\n",
+ WARNING("problems snd_mixer_selem_register'ing: %s\n",
snd_strerror(err));
return -1;
}
if((err = snd_mixer_load(volume_alsaMixerHandle))<0) {
snd_mixer_close(volume_alsaMixerHandle);
- ERROR("problems snd_mixer_selem_register'ing: %s\n",
+ WARNING("problems snd_mixer_selem_register'ing: %s\n",
snd_strerror(err));
return -1;
}
@@ -223,7 +223,7 @@ int prepAlsaMixer(char * card) {
return 0;
}
- ERROR("can't find alsa mixer_control \"%s\"\n",controlName);
+ WARNING("can't find alsa mixer_control \"%s\"\n",controlName);
snd_mixer_close(volume_alsaMixerHandle);
return -1;
@@ -244,7 +244,7 @@ int getAlsaVolumeLevel() {
if((err = snd_mixer_selem_get_playback_volume(volume_alsaElem,
SND_MIXER_SCHN_FRONT_LEFT,&level))<0) {
- ERROR("problems getting alsa volume: %s\n",snd_strerror(err));
+ WARNING("problems getting alsa volume: %s\n",snd_strerror(err));
return -1;
}
@@ -272,7 +272,7 @@ int changeAlsaVolumeLevel(FILE * fp, int change, int rel) {
if((err = snd_mixer_selem_get_playback_volume(volume_alsaElem,
SND_MIXER_SCHN_FRONT_LEFT,&level))<0) {
commandError(fp, ACK_ERROR_SYSTEM, "problems getting volume");
- ERROR("problems getting alsa volume: %s\n",snd_strerror(err));
+ WARNING("problems getting alsa volume: %s\n",snd_strerror(err));
return -1;
}
@@ -298,7 +298,7 @@ int changeAlsaVolumeLevel(FILE * fp, int change, int rel) {
if((err = snd_mixer_selem_set_playback_volume_all(
volume_alsaElem,level))<0) {
commandError(fp, ACK_ERROR_SYSTEM, "problems setting volume");
- ERROR("problems setting alsa volume: %s\n",snd_strerror(err));
+ WARNING("problems setting alsa volume: %s\n",snd_strerror(err));
return -1;
}
@@ -365,7 +365,7 @@ void initVolume() {
void openVolumeDevice() {
if(prepMixer(volume_mixerDevice)<0) {
- ERROR("using software volume\n");
+ WARNING("using software volume\n");
volume_mixerType = VOLUME_MIXER_TYPE_SOFTWARE;
}
}