diff --git a/lib/c/criu.c b/lib/c/criu.c index a7df66a7a..76385e038 100644 --- a/lib/c/criu.c +++ b/lib/c/criu.c @@ -840,6 +840,35 @@ int criu_add_inherit_fd(int fd, char *key) return criu_local_add_inherit_fd(global_opts, fd, key); } +int criu_local_add_external(criu_opts *opts, char *key) +{ + int nr; + char **a, *e = NULL; + + e = strdup(key); + if (!e) + goto err; + + nr = opts->rpc->n_external + 1; + a = realloc(opts->rpc->external, nr * sizeof(*a)); + if (!a) + goto err; + + a[nr - 1] = e; + opts->rpc->external = a; + opts->rpc->n_external = nr; + return 0; +err: + if (e) + free(e); + return -ENOMEM; +} + +int criu_add_external(char *key) +{ + return criu_local_add_external(global_opts, key); +} + static CriuResp *recv_resp(int socket_fd) { unsigned char *buf = NULL; diff --git a/lib/c/criu.h b/lib/c/criu.h index 5785044d1..f887b711f 100644 --- a/lib/c/criu.h +++ b/lib/c/criu.h @@ -93,6 +93,7 @@ int criu_add_skip_mnt(char *mnt); void criu_set_ghost_limit(unsigned int limit); int criu_add_irmap_path(char *path); int criu_add_inherit_fd(int fd, char *key); +int criu_add_external(char *key); /* * The criu_notify_arg_t na argument is an opaque @@ -202,6 +203,7 @@ int criu_local_add_cg_props(criu_opts *opts, char *stream); int criu_local_add_cg_props_file(criu_opts *opts, char *path); int criu_local_add_cg_dump_controller(criu_opts *opts, char *name); int criu_local_add_inherit_fd(criu_opts *opts, int fd, char *key); +int criu_local_add_external(criu_opts *opts, char *key); void criu_local_set_notify_cb(criu_opts *opts, int (*cb)(char *action, criu_notify_arg_t na));