Implemented appmessage_new_call_variables() (untested)
This commit is contained in:
parent
4291bae1f9
commit
01e5eaa1e7
|
@ -62,27 +62,77 @@ AppMessage * appmessage_new_call(char const * method, ...)
|
||||||
message->t.call.method = string_new(method);
|
message->t.call.method = string_new(method);
|
||||||
message->t.call.args = NULL;
|
message->t.call.args = NULL;
|
||||||
message->t.call.args_cnt = 0;
|
message->t.call.args_cnt = 0;
|
||||||
|
/* check for errors */
|
||||||
|
if(message->t.call.method == NULL)
|
||||||
|
{
|
||||||
|
appmessage_delete(message);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
/* copy the arguments */
|
/* copy the arguments */
|
||||||
va_start(ap, method);
|
va_start(ap, method);
|
||||||
for(i = 0; (type = va_arg(ap, int)) >= 0; i++)
|
for(i = 0; (type = va_arg(ap, int)) >= 0; i++)
|
||||||
{
|
{
|
||||||
if((p = realloc(message->t.call.args, sizeof(*p) * (i + 1)))
|
if((p = realloc(message->t.call.args, sizeof(*p) * (i + 1)))
|
||||||
== NULL)
|
== NULL)
|
||||||
|
{
|
||||||
|
appmessage_delete(message);
|
||||||
|
message = NULL;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
message->t.call.args = p;
|
message->t.call.args = p;
|
||||||
if((v = variable_new(type, va_arg(ap, void *))) == NULL)
|
if((v = variable_new(type, va_arg(ap, void *))) == NULL)
|
||||||
|
{
|
||||||
|
appmessage_delete(message);
|
||||||
|
message = NULL;
|
||||||
break;
|
break;
|
||||||
message->t.call.args = p;
|
}
|
||||||
message->t.call.args[i] = v;
|
message->t.call.args[i] = v;
|
||||||
message->t.call.args_cnt = i + 1;
|
message->t.call.args_cnt = i + 1;
|
||||||
}
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* appmessage_new_call_variables */
|
||||||
|
AppMessage * appmessage_new_call_variables(char const * method, ...)
|
||||||
|
{
|
||||||
|
AppMessage * message;
|
||||||
|
va_list ap;
|
||||||
|
size_t i;
|
||||||
|
Variable * v;
|
||||||
|
Variable ** p;
|
||||||
|
|
||||||
|
if((message = object_new(sizeof(*message))) == NULL)
|
||||||
|
return NULL;
|
||||||
|
message->type = AMT_CALL;
|
||||||
|
message->t.call.method = string_new(method);
|
||||||
|
message->t.call.args = NULL;
|
||||||
|
message->t.call.args_cnt = 0;
|
||||||
/* check for errors */
|
/* check for errors */
|
||||||
if(message->t.call.method == NULL || type >= 0)
|
if(message->t.call.method == NULL)
|
||||||
{
|
{
|
||||||
appmessage_delete(message);
|
appmessage_delete(message);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
/* copy the arguments */
|
||||||
|
va_start(ap, method);
|
||||||
|
for(i = 0; (v = va_arg(ap, Variable *)) != NULL; i++)
|
||||||
|
{
|
||||||
|
if((p = realloc(message->t.call.args, sizeof(*p) * (i + 1)))
|
||||||
|
== NULL)
|
||||||
|
break;
|
||||||
|
message->t.call.args = p;
|
||||||
|
if((v = variable_new_copy(v)) == NULL)
|
||||||
|
{
|
||||||
|
appmessage_delete(message);
|
||||||
|
message = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
message->t.call.args[i] = v;
|
||||||
|
message->t.call.args_cnt = i + 1;
|
||||||
|
}
|
||||||
|
va_end(ap);
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user