[Commit] librr/src Makefile.am,1.4,1.5 rr.c,1.4,1.5 rr.h,1.8,1.9 rr_board.c,1.8,1.9 rr_client.c,1.4,1.5

Carl Worth commit at keithp.com
Sat Jun 14 01:32:29 PDT 2003


Committed by: cworth

Update of /local/src/CVS/librr/src
In directory home.keithp.com:/tmp/cvs-serv18870/src

Modified Files:
	Makefile.am rr.c rr.h rr_board.c rr_client.c 
Log Message:
Fixes

Index: Makefile.am
===================================================================
RCS file: /local/src/CVS/librr/src/Makefile.am,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- Makefile.am	12 Jun 2003 18:00:55 -0000	1.4
+++ Makefile.am	14 Jun 2003 07:32:26 -0000	1.5
@@ -11,6 +11,5 @@
 	rr_string.c \
 	rr_strbuf.c
 
-librr_la_CFLAGS = -Wall
 librr_la_LDFLAGS = -version-info @VERSION_INFO@
 

Index: rr.c
===================================================================
RCS file: /local/src/CVS/librr/src/rr.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- rr.c	11 Jun 2003 23:26:14 -0000	1.4
+++ rr.c	14 Jun 2003 07:32:26 -0000	1.5
@@ -58,10 +58,6 @@
 	return "out of memory";
     case RR_STATUS_ROBOT_NOT_FOUND:
 	return "robot not found";
-    case RR_STATUS_NOT_DIRECTION:
-	return "not a direction";
-    case RR_STATUS_BLOCKED:
-	return "robot is blocked";
     case RR_STATUS_OCCUPIED:
 	return "space is already occupied";
     case RR_STATUS_HISTORY_EMPTY:
@@ -78,8 +74,48 @@
 	return "unexpected protocol error";
     case RR_STATUS_EOF:
 	return "end of file";
+    case RR_STATUS_NO_NAME_SET:
+	return "no name set";
     case RR_STATUS_INVALID_NAME:
-	return "not a unique username";
+	return "invalid username";
+    case RR_STATUS_INVALID_COMMAND:
+	return "invalid command";
+    case RR_STATUS_SYNTAX_ERROR:
+	return "syntax error";
+    case RR_STATUS_NOT_NUMBER:
+	return "not a number";
+    case RR_STATUS_NOT_COLOR:
+	return "not a color";
+    case RR_STATUS_NOT_SHAPE:
+	return "not a shape";
+    case RR_STATUS_NOT_DIRECTION:
+	return "not a direction";
+    case RR_STATUS_NO_GAME:
+	return "no such game";
+    case RR_STATUS_NOT_EMPTY:
+	return "game is not empty";
+    case RR_STATUS_NO_USER:
+	return "no such user";
+    case RR_STATUS_NOT_IN_GAME:
+	return "not in game";
+    case RR_STATUS_NOT_PLAYING:
+	return "not playing";
+    case RR_STATUS_NOT_FINISHED:
+	return "game not finished";
+    case RR_STATUS_NOT_BIDDING:
+	return "not bidding";
+    case RR_STATUS_NOT_LOWER:
+	return "bid is not lower";
+    case RR_STATUS_NO_BID:
+	return "no bid entered";
+    case RR_STATUS_NOT_ACTIVE:
+	return "not active";
+    case RR_STATUS_BLOCKED:
+	return "robot is blocked";
+    case RR_STATUS_TOO_MANY_MOVES:
+	return "too many moves";
+    case RR_STATUS_UNPARSED_ERROR:
+	return "unparsed error";
     default:
 	return "unidentified error";
     }

Index: rr.h
===================================================================
RCS file: /local/src/CVS/librr/src/rr.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- rr.h	12 Jun 2003 22:56:46 -0000	1.8
+++ rr.h	14 Jun 2003 07:32:26 -0000	1.9
@@ -272,8 +272,7 @@
 
 rr_status_t
 rr_board_set_goal_target (rr_board_t *board,
-			  rr_target_color_t color,
-			  rr_target_shape_t shape);
+			  rr_target_t target);
 
 rr_target_t
 rr_board_get_goal_target (rr_board_t *board);
@@ -359,6 +358,11 @@
 
 int
 rr_client_fd (rr_client_t *client);
+
+rr_status_t
+rr_client_request (rr_client_t *client,
+		    const char *request,
+		    char ***response);
 
 rr_status_t
 rr_client_helo (rr_client_t *client, const char *user);

Index: rr_board.c
===================================================================
RCS file: /local/src/CVS/librr/src/rr_board.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- rr_board.c	12 Jun 2003 22:56:46 -0000	1.8
+++ rr_board.c	14 Jun 2003 07:32:26 -0000	1.9
@@ -279,10 +279,9 @@
 
 rr_status_t
 rr_board_set_goal_target (rr_board_t *board,
-			  rr_target_color_t color,
-			  rr_target_shape_t shape)
+			  rr_target_t target)
 {
-    board->goal_target = (color | shape);
+    board->goal_target = target;
     return RR_STATUS_SUCCESS;
 }
 

Index: rr_client.c
===================================================================
RCS file: /local/src/CVS/librr/src/rr_client.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- rr_client.c	12 Jun 2003 18:00:56 -0000	1.4
+++ rr_client.c	14 Jun 2003 07:32:26 -0000	1.5
@@ -50,18 +50,15 @@
 _rr_client_disconnect (rr_client_t *client);
 
 static rr_status_t
-_rr_client_request (rr_client_t *client,
-		    rr_cmd_t cmd, const char *arg,
-		    char ***response);
-
-static rr_status_t
-_rr_client_send (rr_client_t *client, const char *fmt, ...);
+_rr_client_cmd_request (rr_client_t *client,
+			rr_cmd_t cmd, const char *arg,
+			char ***response);
 
 static rr_status_t
-_rr_client_send_va (rr_client_t *client, const char *fmt, va_list va);
+_rr_client_send (rr_client_t *client, const char *msg);
 
 static rr_status_t
-_rr_client_recv (rr_client_t *client, rr_cmd_t cmd, char ***arg);
+_rr_client_recv (rr_client_t *client, const char *request, char ***arg);
 
 static rr_status_t
 _rr_client_error_to_status (const char *error);
@@ -432,73 +429,73 @@
 rr_status_t
 rr_client_helo (rr_client_t *client, const char *user)
 {
-    return _rr_client_request (client, RR_CMD_HELO, user, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_HELO, user, NULL);
 }
 
 rr_status_t
 rr_client_games (rr_client_t *client, char ***games)
 {
-    return _rr_client_request (client, RR_CMD_GAMES, NULL, games);
+    return _rr_client_cmd_request (client, RR_CMD_GAMES, NULL, games);
 }
 
 rr_status_t
 rr_client_message (rr_client_t *client, const char *text)
 {
-    return _rr_client_request (client, RR_CMD_MESSAGE, text, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_MESSAGE, text, NULL);
 }
 
 rr_status_t
 rr_client_quit (rr_client_t *client)
 {
-    return _rr_client_request (client, RR_CMD_QUIT, NULL, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_QUIT, NULL, NULL);
 }
 
 rr_status_t
 rr_client_players (rr_client_t *client, char ***players)
 {
-    return _rr_client_request (client, RR_CMD_PLAYERS, NULL, players);
+    return _rr_client_cmd_request (client, RR_CMD_PLAYERS, NULL, players);
 }
 
 rr_status_t
 rr_client_watchers (rr_client_t *client, char ***watchers)
 {
-    return _rr_client_request (client, RR_CMD_WATCHERS, NULL, watchers);
+    return _rr_client_cmd_request (client, RR_CMD_WATCHERS, NULL, watchers);
 }
 
 rr_status_t
 rr_client_gameinfo (rr_client_t *client, const char *game, char ***info)
 {
-    return _rr_client_request (client, RR_CMD_GAMEINFO, game, info);
+    return _rr_client_cmd_request (client, RR_CMD_GAMEINFO, game, info);
 }
 
 rr_status_t
 rr_client_new (rr_client_t *client, const char *game)
 {
-    return _rr_client_request (client, RR_CMD_NEW, game, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_NEW, game, NULL);
 }
 
 rr_status_t
 rr_client_join (rr_client_t *client, const char *game)
 {
-    return _rr_client_request (client, RR_CMD_JOIN, game, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_JOIN, game, NULL);
 }
 
 rr_status_t
 rr_client_watch (rr_client_t *client, const char *game)
 {
-    return _rr_client_request (client, RR_CMD_WATCH, game, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_WATCH, game, NULL);
 }
 
 rr_status_t
 rr_client_dispose (rr_client_t *client, const char *game)
 {
-    return _rr_client_request (client, RR_CMD_DISPOSE, game, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_DISPOSE, game, NULL);
 }
 
 rr_status_t
 rr_client_userinfo (rr_client_t *client, const char *user, char ***info)
 {
-    return _rr_client_request (client, RR_CMD_USERINFO, user, info);
+    return _rr_client_cmd_request (client, RR_CMD_USERINFO, user, info);
 }
 
 rr_status_t
@@ -507,7 +504,7 @@
     rr_status_t status;
     char **args;
 
-    status = _rr_client_request (client, RR_CMD_SHOW, NULL, &args);
+    status = _rr_client_cmd_request (client, RR_CMD_SHOW, NULL, &args);
     if (status)
 	return status;
 
@@ -519,70 +516,101 @@
 rr_status_t
 rr_client_turn (rr_client_t *client)
 {
-    return _rr_client_request (client, RR_CMD_TURN, NULL, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_TURN, NULL, NULL);
 }
 
 rr_status_t
 rr_client_part (rr_client_t *client)
 {
-    return _rr_client_request (client, RR_CMD_PART, NULL, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_PART, NULL, NULL);
 }
 
 rr_status_t
 rr_client_bid (rr_client_t *client, const char *bid)
 {
-    return _rr_client_request (client, RR_CMD_BID, bid, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_BID, bid, NULL);
 }
 
 rr_status_t
 rr_client_revoke (rr_client_t *client)
 {
-    return _rr_client_request (client, RR_CMD_REVOKE, NULL, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_REVOKE, NULL, NULL);
 }
 
 rr_status_t
 rr_client_abandon (rr_client_t *client)
 {
-    return _rr_client_request (client, RR_CMD_ABANDON, NULL, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_ABANDON, NULL, NULL);
 }
 
 rr_status_t
 rr_client_move (rr_client_t *client, const char *move)
 {
-    return _rr_client_request (client, RR_CMD_MOVE, move, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_MOVE, move, NULL);
 }
 
 rr_status_t
 rr_client_undo (rr_client_t *client)
 {
-    return _rr_client_request (client, RR_CMD_UNDO, NULL, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_UNDO, NULL, NULL);
 }
 
 rr_status_t
 rr_client_reset (rr_client_t *client)
 {
-    return _rr_client_request (client, RR_CMD_RESET, NULL, NULL);
+    return _rr_client_cmd_request (client, RR_CMD_RESET, NULL, NULL);
 }
 
 static rr_status_t
-_rr_client_request (rr_client_t *client,
-		    rr_cmd_t cmd, const char *arg,
-		    char ***response)
+_rr_client_cmd_request (rr_client_t *client,
+			rr_cmd_t cmd, const char *arg,
+			char ***response)
 {
-    rr_status_t status = RR_STATUS_SUCCESS;
+    rr_status_t status;
     char *cmd_str;
-    char **recv;
+    char *request;
 
     cmd_str = RR_CLIENT_COMMAND[cmd].arg;
 
     if (arg)
-	status = _rr_client_send (client, "%s %s\n", cmd_str, arg);
+	_rr_string_sprintf_alloc (&request, "%s %s\n", cmd_str, arg); 
     else
-	status = _rr_client_send (client, "%s\n", cmd_str);
+	_rr_string_sprintf_alloc (&request, "%s\n", cmd_str);
+
+    status = rr_client_request (client, request, response);
+
+    free (request);
+
+    return status;
+}
+
+rr_status_t
+rr_client_request (rr_client_t *client,
+		   const char *request,
+		   char ***response)
+{
+    rr_status_t status = RR_STATUS_SUCCESS;
+    char **recv;
+    char *r = NULL;
+
+    if (request[strlen (request)-1] != '\n') {
+	r = malloc (strlen (request) + 2);
+	if (r == NULL)
+	    return RR_STATUS_NO_MEMORY;
+	strcpy (r, request);
+	r[strlen (request)] = '\n';
+	r[strlen (request)+1] = '\0';
+	request = r;
+    }
+
+    status = _rr_client_send (client, request);
     if (status)
 	goto DONE;
 
-    status = _rr_client_recv (client, cmd, &recv);
+    if (r)
+	free (r);
+
+    status = _rr_client_recv (client, request, &recv);
     if (status)
 	goto DONE;
 
@@ -596,35 +624,16 @@
     return status;
 }
 
-/* NOTE: Called with client->mutex held */
-static rr_status_t
-_rr_client_send (rr_client_t *client, const char *fmt, ...)
-{
-    rr_status_t status;
-    va_list va;
-
-    va_start (va, fmt);
-    status = _rr_client_send_va (client, fmt, va);
-    va_end (va);
-
-    return status;
-}
-
-/* NOTE: Called with client->mutex held */
 static rr_status_t
-_rr_client_send_va (rr_client_t *client, const char *fmt, va_list va)
+_rr_client_send (rr_client_t *client, const char *msg)
 {
-    char *msg, *m;
+    const char *m;
     int len, r;
     rr_status_t status = RR_STATUS_SUCCESS;
 
     if (client->sock == -1)
 	return RR_STATUS_NOT_CONNECTED;
 
-    _rr_string_sprintf_alloc_va (&msg, fmt, va);
-    if (msg == NULL)
-	return RR_STATUS_NO_MEMORY;
-
     len = strlen (msg);
     m = msg;
     while (len)
@@ -644,8 +653,6 @@
 	else
 	    _rr_client_write_block (client);
     }
-    
-    free (msg);
 
     return status;
 }
@@ -694,14 +701,14 @@
     else
 	return RR_STATUS_UNPARSED_ERROR;
 }
-/* NOTE: Called with client->mutex held */
+
 static rr_status_t
-_rr_client_recv (rr_client_t *client, rr_cmd_t cmd, char ***argp)
+_rr_client_recv (rr_client_t *client, const char *request, char ***argp)
 {
     char **arg;
     rr_status_t status = _rr_client_reply (client, &arg);
     
-    if (arg[0] && strcmp (arg[0], RR_CLIENT_COMMAND[cmd].arg) == 0) {
+    if (arg[0] && strncasecmp (arg[0], request, strlen (arg[0])) == 0) {
 	status = RR_STATUS_SUCCESS;
 	_rr_strings_cdr (arg);
 	*argp = arg;




More information about the Commit mailing list