From f958e0a4c5bb7241b2ec443a402d10c29abfc08f Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Fri, 4 Jun 2004 01:58:31 +0000 Subject: [PATCH] work on ACK error codes git-svn-id: https://svn.musicpd.org/mpd/trunk@1324 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/command.c | 16 +++++++++++++++- src/command.h | 17 ++++++++++++++++- src/playlist.c | 44 +++++++++++--------------------------------- src/tables.c | 3 +-- 4 files changed, 43 insertions(+), 37 deletions(-) diff --git a/src/command.c b/src/command.c index 121c9358e..b83daa8eb 100644 --- a/src/command.c +++ b/src/command.c @@ -106,6 +106,9 @@ struct _CommandEntry { CommandListHandlerFunction listHandler; }; +char * current_command = NULL; +int command_listNum = 0; + CommandEntry * getCommandEntryFromString(char * string, int * permission); List * commandList; @@ -679,8 +682,11 @@ int checkArgcAndPermission(CommandEntry * cmd, FILE *fp, CommandEntry * getCommandEntryAndCheckArgcAndPermission(FILE * fp, unsigned int * permission, int argArrayLength, char ** argArray) { + static char unknown[] = ""; CommandEntry * cmd; + current_command = unknown; + if(argArrayLength == 0) return NULL; if(!findInList(commandList, argArray[0],(void *)&cmd)) { @@ -688,6 +694,8 @@ CommandEntry * getCommandEntryAndCheckArgcAndPermission(FILE * fp, return NULL; } + current_command = cmd->cmd; + if(checkArgcAndPermission(cmd, fp, *permission, argArrayLength, argArray) < 0) { @@ -739,6 +747,8 @@ int processCommandInternal(FILE * fp, unsigned int * permission, freeArgArray(argArray,argArrayLength); + current_command = NULL; + return ret; } @@ -749,6 +759,8 @@ int proccessListOfCommands(FILE * fp, int * permission, int * expired, ListNode * tempNode; int ret = 0; + command_listNum = 0; + while(node!=NULL) { DEBUG("proccesListOfCommands: process command \"%s\"\n", node->data); @@ -759,7 +771,10 @@ int proccessListOfCommands(FILE * fp, int * permission, int * expired, deleteNodeFromList(list,node); node = tempNode; if(ret!=0 || (*expired)!=0) node = NULL; + command_listNum++; } + + command_listNum = 0; return ret; } @@ -767,4 +782,3 @@ int proccessListOfCommands(FILE * fp, int * permission, int * expired, int processCommand(FILE * fp, unsigned int * permission, char * commandString) { return processCommandInternal(fp,permission,commandString,NULL); } -/* vim:set shiftwidth=4 tabstop=8 expandtab: */ diff --git a/src/command.h b/src/command.h index 3aad04dca..8e2b90711 100644 --- a/src/command.h +++ b/src/command.h @@ -29,6 +29,9 @@ #define COMMAND_RETURN_KILL 10 #define COMMAND_RETURN_CLOSE 20 +extern char * current_command; +extern int command_listNum; + int proccessListOfCommands(FILE * fp, int * permission, int * expired, List * list); @@ -40,6 +43,18 @@ void finishCommands(); #define commandSuccess(fp) myfprintf(fp, "OK\n") -#define commandError(fp, format, ... ) myfprintf(fp, "ACK " format "\n", ##__VA_ARGS__) +#define commandError(fp, format, ... ) \ + {\ + if(current_command) { \ + myfprintf(fp, "ACK [%s:%i] " format "\n", \ + current_command, command_listNum, \ + ##__VA_ARGS__); \ + current_command = NULL; \ + } \ + else { \ + myfprintf(fp, "ACK [:%i] " format "\n", \ + command_listNum, ##__VA_ARGS__); \ + } \ + } #endif diff --git a/src/playlist.c b/src/playlist.c index d1691b5ed..9c8755216 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -375,7 +375,7 @@ int playlistInfo(FILE * fp,int song) { end = song+1; } if(song>=playlist.length) { - commandError(fp, "song doesn't exist"); + commandError(fp, "song doesn't exist: \"%i\"", song); return -1; } @@ -535,11 +535,11 @@ int swapSongsInPlaylist(FILE * fp, int song1, int song2) { int currentSong = -1; if(song1<0 || song1>=playlist.length) { - commandError(fp,"\"%i\" is not in the playlist", song1); + commandError(fp, "song doesn't exist: \"%i\"", song1); return -1; } if(song2<0 || song2>=playlist.length) { - commandError(fp, "\"%i\" is not in the playlist", song2); + commandError(fp, "song doesn't exist: \"%i\"", song2); return -1; } @@ -585,12 +585,8 @@ int deleteFromPlaylist(FILE * fp, int song) { int i; int songOrder; - if(song<0) { - commandError(fp, "need a positive integer"); - return -1; - } - if(song>=playlist.length) { - commandError(fp, "song doesn't exist"); + if(song<0 || song>=playlist.length) { + commandError(fp, "song doesn't exist: \"%i\"", song); return -1; } @@ -713,18 +709,8 @@ int playPlaylist(FILE * fp, int song, int stopOnError) { i = 0; } } - else if(song<0) { - commandError(fp, "need integer >= -1"); - playlist_state = PLAYLIST_STATE_STOP; - return -1; - } - if(!playlist.length) { - commandError(fp, "playlist is empty"); - playlist_state = PLAYLIST_STATE_STOP; - return -1; - } - else if(song>=playlist.length) { - commandError(fp, "song doesn't exist"); + else if(song<0 || song>=playlist.length) { + commandError(fp, "song doesn't exist: \"%i\"", song); playlist_state = PLAYLIST_STATE_STOP; return -1; } @@ -869,12 +855,12 @@ int moveSongInPlaylist(FILE * fp, int from, int to) { int currentSong = -1; if(from<0 || from>=playlist.length) { - commandError(fp, "\"%i\" is not a song in the playlist", from); + commandError(fp, "song doesn't exist: \"%i\"", from); return -1; } if(to<0 || to>=playlist.length) { - commandError(fp, "\"%i\" is not a song in the playlist", to); + commandError(fp, "song doesn't exist: \"%i\"", to); return -1; } @@ -1253,16 +1239,8 @@ int getPlaylistLength() { int seekSongInPlaylist(FILE * fp, int song, float time) { int i = song; - if(song<0) { - commandError(fp, "need integer >= -1"); - return -1; - } - if(!playlist.length) { - commandError(fp, "playlist is empty"); - return -1; - } - else if(song>=playlist.length) { - commandError(fp, "song doesn't exist"); + if(song<0 || song>=playlist.length) { + commandError(fp, "song doesn't exist: \"%i\"", song); return -1; } diff --git a/src/tables.c b/src/tables.c index 114f71d15..0270319f4 100644 --- a/src/tables.c +++ b/src/tables.c @@ -192,8 +192,7 @@ int printAllKeysOfTable(FILE * fp, char * table, char * arg1) { return printAllAlbums(fp,arg1); } else { - commandError(fp, "table \"%s\" does not exist or not available " - "for listing", table); + commandError(fp, "table \"%s\" does not exist", table); return -1; } }