[PATCH 07 of 11 c-hglib:level0 V2] hg_rawcommannd: additional functions (free_data and cmd_prepare)

Iulian Stana julian.stana at gmail.com
Fri Sep 13 15:31:57 CDT 2013


# HG changeset patch
# User Iulian Stana <julian.stana at gmail.com>
# Date 1379103560 -10800
#      Fri Sep 13 23:19:20 2013 +0300
# Node ID 4a3e55c42250a8efa86cd1ce83bfee48fbc10378
# Parent  f590a6dd6fe4e6402ba645b7a59ce009780d6fef
hg_rawcommannd: additional functions (free_data and cmd_prepare)

free_data: release the used memory from out_data, hg_handle field
cmd_prepare: prepare the command for sending process

diff --git a/utils.c b/utils.c
--- a/utils.c
+++ b/utils.c
@@ -15,3 +15,29 @@
 	return (val << 16) | (val >> 16);
 }
 
+/*
+ * Prepare the command for sending process. 
+ * */
+char *cmd_prepare(char *const command[], int *cmd_size)
+{
+	size_t cmd_length = 0;
+	char *new_cmd;
+	int i = 0;
+
+	while(command[i]){
+		cmd_length += strlen(command[i]) + 1;
+		++i;
+	}
+
+	new_cmd = malloc(cmd_length + 1);
+	i = 0;
+	while(command[i]){
+		strcpy(new_cmd, command[i]);
+		new_cmd += strlen(command[i]) + 1; 
+		++i;
+	}
+	new_cmd -= cmd_length;
+
+	*cmd_size = cmd_length - 1;
+	return new_cmd;
+}
diff --git a/utils.h b/utils.h
--- a/utils.h
+++ b/utils.h
@@ -10,4 +10,23 @@
  * */
 uint32_t swap_uint32( uint32_t val );
 
+/**
+ * \brief Prepare the command for sending process. 
+ * 
+ * Replace all the blank space with the '\0' character.
+ * \param command an array that will contain the mercurial command
+ * \param cmd_size - array size
+ * \retval string representing the command that will be send to cmdsrv
+ * \retval *cmd_size will be set on string size
+ * 
+ * \code
+ *    char *command[] = {"tip", "-p", NULL};
+ *    char *cmd_str = cmd_prepare(command, 0);
+ *    prinf("==%s==", cmd_str);
+ *    ---> ==tip\0-p==
+ * \endcode
+ * */
+char *cmd_prepare(char *const command[], int *cmd_size);
+
+
 #endif


More information about the Mercurial-devel mailing list