[CRIU] [PATCH 2/2] c-lib: converted `char *`-args to `const char *`

Andrei Vagin avagin at gmail.com
Thu Jan 24 20:10:51 MSK 2019


On Fri, Dec 21, 2018 at 08:00:21AM +0100, Martin Wührer wrote:
> As most of the `criu_(local_)*` functions already call `strdup()`,
> it is possible, to change the function signature to `const char *`.
> 
> As the struct `criu_opts` already contains a `const char *
> service_binary`, also the member `service_address` is changed to
> `const char`.
> 
> Additonally, also the function `criu_local_set_freeze_cgroup()` now
> calls `strdup()`.

This patch changes the public API, will it break existing users?

> 
> Signed-off-by: Martin Wührer <martin.wuehrer at artech.at>
> ---
>  lib/c/criu.c | 65 ++++++++++++++++++++++++++--------------------------
>  lib/c/criu.h | 58 +++++++++++++++++++++++-----------------------
>  2 files changed, 62 insertions(+), 61 deletions(-)
> 
> diff --git a/lib/c/criu.c b/lib/c/criu.c
> index 5318fc17..b11f3236 100644
> --- a/lib/c/criu.c
> +++ b/lib/c/criu.c
> @@ -25,7 +25,7 @@ struct criu_opts {
>  	int			(*notify)(char *action, criu_notify_arg_t na);
>  	enum criu_service_comm	service_comm;
>  	union {
> -		char		*service_address;
> +		const char	*service_address;
>  		int		service_fd;
>  		const char	*service_binary;
>  	};
> @@ -45,7 +45,7 @@ void criu_set_service_comm(enum criu_service_comm comm)
>  	criu_local_set_service_comm(global_opts, comm);
>  }
>  
> -void criu_local_set_service_address(criu_opts *opts, char *path)
> +void criu_local_set_service_address(criu_opts *opts, const char *path)
>  {
>  	if (path)
>  		opts->service_address = path;
> @@ -53,7 +53,7 @@ void criu_local_set_service_address(criu_opts *opts, char *path)
>  		opts->service_address = CR_DEFAULT_SERVICE_ADDRESS;
>  }
>  
> -void criu_set_service_address(char *path)
> +void criu_set_service_address(const char *path)
>  {
>  	criu_local_set_service_address(global_opts, path);
>  }
> @@ -221,6 +221,7 @@ void criu_local_free_opts(criu_opts *opts)
>  			free(opts->rpc->cgroup_props);
>  			free(opts->rpc->parent_img);
>  			free(opts->rpc->root);
> +			free(opts->rpc->freeze_cgroup);
>  			free(opts->rpc->log_file);
>  			free(opts->rpc);
>  		}
> @@ -312,12 +313,12 @@ void criu_set_images_dir_fd(int fd)
>  	criu_local_set_images_dir_fd(global_opts, fd);
>  }
>  
> -void criu_local_set_parent_images(criu_opts *opts, char *path)
> +void criu_local_set_parent_images(criu_opts *opts, const char *path)
>  {
>  	opts->rpc->parent_img = strdup(path);
>  }
>  
> -void criu_set_parent_images(char *path)
> +void criu_set_parent_images(const char *path)
>  {
>  	criu_local_set_parent_images(global_opts, path);
>  }
> @@ -523,12 +524,12 @@ void criu_set_log_level(int log_level)
>  	criu_local_set_log_level(global_opts, log_level);
>  }
>  
> -void criu_local_set_root(criu_opts *opts, char *root)
> +void criu_local_set_root(criu_opts *opts, const char *root)
>  {
>  	opts->rpc->root = strdup(root);
>  }
>  
> -void criu_set_root(char *root)
> +void criu_set_root(const char *root)
>  {
>  	criu_local_set_root(global_opts, root);
>  }
> @@ -555,12 +556,12 @@ void criu_set_manage_cgroups_mode(enum criu_cg_mode mode)
>  	criu_local_set_manage_cgroups_mode(global_opts, mode);
>  }
>  
> -void criu_local_set_freeze_cgroup(criu_opts *opts, char *name)
> +void criu_local_set_freeze_cgroup(criu_opts *opts, const char *name)
>  {
> -	opts->rpc->freeze_cgroup = name;
> +	opts->rpc->freeze_cgroup = strdup(name);
>  }
>  
> -void criu_set_freeze_cgroup(char *name)
> +void criu_set_freeze_cgroup(const char *name)
>  {
>  	criu_local_set_freeze_cgroup(global_opts, name);
>  }
> @@ -608,12 +609,12 @@ void criu_set_ext_masters(bool val)
>  	criu_local_set_ext_masters(global_opts, val);
>  }
>  
> -void criu_local_set_log_file(criu_opts *opts, char *log_file)
> +void criu_local_set_log_file(criu_opts *opts, const char *log_file)
>  {
>  	opts->rpc->log_file = strdup(log_file);
>  }
>  
> -void criu_set_log_file(char *log_file)
> +void criu_set_log_file(const char *log_file)
>  {
>  	criu_local_set_log_file(global_opts, log_file);
>  }
> @@ -660,7 +661,7 @@ int criu_set_exec_cmd(int argc, char *argv[])
>  	return criu_local_set_exec_cmd(global_opts, argc, argv);
>  }
>  
> -int criu_local_add_ext_mount(criu_opts *opts, char *key, char *val)
> +int criu_local_add_ext_mount(criu_opts *opts, const char *key, const char *val)
>  {
>  	int nr;
>  	ExtMountMap **a, *m;
> @@ -697,12 +698,12 @@ er:
>  	return -ENOMEM;
>  }
>  
> -int criu_add_ext_mount(char *key, char *val)
> +int criu_add_ext_mount(const char *key, const char *val)
>  {
>  	return criu_local_add_ext_mount(global_opts, key, val);
>  }
>  
> -int criu_local_add_cg_root(criu_opts *opts, char *ctrl, char *path)
> +int criu_local_add_cg_root(criu_opts *opts, const char *ctrl, const char *path)
>  {
>  	int nr;
>  	CgroupRoot **a, *root;
> @@ -743,12 +744,12 @@ er:
>  	return -ENOMEM;
>  }
>  
> -int criu_add_cg_root(char *ctrl, char *path)
> +int criu_add_cg_root(const char *ctrl, const char *path)
>  {
>  	return criu_local_add_cg_root(global_opts, ctrl, path);
>  }
>  
> -int criu_local_add_veth_pair(criu_opts *opts, char *in, char *out)
> +int criu_local_add_veth_pair(criu_opts *opts, const char *in, const char *out)
>  {
>  	int nr;
>  	CriuVethPair **a, *p;
> @@ -785,12 +786,12 @@ er:
>  	return -ENOMEM;
>  }
>  
> -int criu_add_veth_pair(char *in, char *out)
> +int criu_add_veth_pair(const char *in, const char *out)
>  {
>  	return criu_local_add_veth_pair(global_opts, in, out);
>  }
>  
> -int criu_local_add_enable_fs(criu_opts *opts, char *fs)
> +int criu_local_add_enable_fs(criu_opts *opts, const char *fs)
>  {
>  	int nr;
>  	char *str = NULL;
> @@ -821,13 +822,13 @@ err:
>  	return -ENOMEM;
>  }
>  
> -int criu_add_enable_fs(char *fs)
> +int criu_add_enable_fs(const char *fs)
>  {
>  	return criu_local_add_enable_fs(global_opts, fs);
>  }
>  
>  
> -int criu_local_add_skip_mnt(criu_opts *opts, char *mnt)
> +int criu_local_add_skip_mnt(criu_opts *opts, const char *mnt)
>  {
>  	int nr;
>  	char *str = NULL;
> @@ -858,7 +859,7 @@ err:
>  	return -ENOMEM;
>  }
>  
> -int criu_local_add_irmap_path(criu_opts *opts, char *path)
> +int criu_local_add_irmap_path(criu_opts *opts, const char *path)
>  {
>  	int nr;
>  	char *my_path;
> @@ -890,7 +891,7 @@ err:
>  	return -ENOMEM;
>  }
>  
> -int criu_local_add_cg_props(criu_opts *opts, char *stream)
> +int criu_local_add_cg_props(criu_opts *opts, const char *stream)
>  {
>  	char *new;
>  
> @@ -903,7 +904,7 @@ int criu_local_add_cg_props(criu_opts *opts, char *stream)
>  	return 0;
>  }
>  
> -int criu_local_add_cg_props_file(criu_opts *opts, char *path)
> +int criu_local_add_cg_props_file(criu_opts *opts, const char *path)
>  {
>  	char *new;
>  
> @@ -916,7 +917,7 @@ int criu_local_add_cg_props_file(criu_opts *opts, char *path)
>  	return 0;
>  }
>  
> -int criu_local_add_cg_dump_controller(criu_opts *opts, char *name)
> +int criu_local_add_cg_dump_controller(criu_opts *opts, const char *name)
>  {
>  	char **new, *ctrl_name;
>  	size_t nr;
> @@ -940,7 +941,7 @@ int criu_local_add_cg_dump_controller(criu_opts *opts, char *name)
>  	return 0;
>  }
>  
> -int criu_add_skip_mnt(char *mnt)
> +int criu_add_skip_mnt(const char *mnt)
>  {
>  	return criu_local_add_skip_mnt(global_opts, mnt);
>  }
> @@ -956,12 +957,12 @@ void criu_set_ghost_limit(unsigned int limit)
>  	criu_local_set_ghost_limit(global_opts, limit);
>  }
>  
> -int criu_add_irmap_path(char *path)
> +int criu_add_irmap_path(const char *path)
>  {
>  	return criu_local_add_irmap_path(global_opts, path);
>  }
>  
> -int criu_local_add_inherit_fd(criu_opts *opts, int fd, char *key)
> +int criu_local_add_inherit_fd(criu_opts *opts, int fd, const char *key)
>  {
>  	int nr;
>  	InheritFd **a, *f;
> @@ -997,12 +998,12 @@ er:
>  	return -ENOMEM;
>  }
>  
> -int criu_add_inherit_fd(int fd, char *key)
> +int criu_add_inherit_fd(int fd, const char *key)
>  {
>  	return criu_local_add_inherit_fd(global_opts, fd, key);
>  }
>  
> -int criu_local_add_external(criu_opts *opts, char *key)
> +int criu_local_add_external(criu_opts *opts, const char *key)
>  {
>  	int nr;
>  	char **a, *e = NULL;
> @@ -1026,7 +1027,7 @@ err:
>  	return -ENOMEM;
>  }
>  
> -int criu_add_external(char *key)
> +int criu_add_external(const char *key)
>  {
>  	return criu_local_add_external(global_opts, key);
>  }
> @@ -1498,7 +1499,7 @@ int criu_local_restore_child(criu_opts *opts)
>  {
>  	int sk, ret = -1;
>  	enum criu_service_comm saved_comm;
> -	char *saved_comm_data;
> +	const char *saved_comm_data;
>  	bool save_comm;
>  	CriuReq req	= CRIU_REQ__INIT;
>  	CriuResp *resp	= NULL;
> diff --git a/lib/c/criu.h b/lib/c/criu.h
> index e244be85..12508c81 100644
> --- a/lib/c/criu.h
> +++ b/lib/c/criu.h
> @@ -41,7 +41,7 @@ enum criu_cg_mode {
>  	CRIU_CG_MODE_DEFAULT,
>  };
>  
> -void criu_set_service_address(char *path);
> +void criu_set_service_address(const char *path);
>  void criu_set_service_fd(int fd);
>  void criu_set_service_binary(const char *path);
>  
> @@ -60,7 +60,7 @@ void criu_free_opts(void);
>  
>  void criu_set_pid(int pid);
>  void criu_set_images_dir_fd(int fd); /* must be set for dump/restore */
> -void criu_set_parent_images(char *path);
> +void criu_set_parent_images(const char *path);
>  void criu_set_work_dir_fd(int fd);
>  void criu_set_leave_running(bool leave_running);
>  void criu_set_ext_unix_sk(bool ext_unix_sk);
> @@ -76,26 +76,26 @@ void criu_set_auto_dedup(bool auto_dedup);
>  void criu_set_force_irmap(bool force_irmap);
>  void criu_set_link_remap(bool link_remap);
>  void criu_set_log_level(int log_level);
> -void criu_set_log_file(char *log_file);
> +void criu_set_log_file(const char *log_file);
>  void criu_set_cpu_cap(unsigned int cap);
> -void criu_set_root(char *root);
> +void criu_set_root(const char *root);
>  void criu_set_manage_cgroups(bool manage);
>  void criu_set_manage_cgroups_mode(enum criu_cg_mode mode);
> -void criu_set_freeze_cgroup(char *name);
> +void criu_set_freeze_cgroup(const char *name);
>  void criu_set_timeout(unsigned int timeout);
>  void criu_set_auto_ext_mnt(bool val);
>  void criu_set_ext_sharing(bool val);
>  void criu_set_ext_masters(bool val);
>  int criu_set_exec_cmd(int argc, char *argv[]);
> -int criu_add_ext_mount(char *key, char *val);
> -int criu_add_veth_pair(char *in, char *out);
> -int criu_add_cg_root(char *ctrl, char *path);
> -int criu_add_enable_fs(char *fs);
> -int criu_add_skip_mnt(char *mnt);
> +int criu_add_ext_mount(const char *key, const char *val);
> +int criu_add_veth_pair(const char *in, const char *out);
> +int criu_add_cg_root(const char *ctrl, const char *path);
> +int criu_add_enable_fs(const char *fs);
> +int criu_add_skip_mnt(const 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);
> +int criu_add_irmap_path(const char *path);
> +int criu_add_inherit_fd(int fd, const char *key);
> +int criu_add_external(const char *key);
>  
>  /*
>   * The criu_notify_arg_t na argument is an opaque
> @@ -161,7 +161,7 @@ typedef struct criu_opts criu_opts;
>  int criu_local_init_opts(criu_opts **opts);
>  void criu_local_free_opts(criu_opts *opts);
>  
> -void criu_local_set_service_address(criu_opts *opts, char *path);
> +void criu_local_set_service_address(criu_opts *opts, const char *path);
>  void criu_local_set_service_fd(criu_opts *opts, int fd);
>  void criu_local_set_service_comm(criu_opts *opts, enum criu_service_comm);
>  
> @@ -169,7 +169,7 @@ void criu_local_set_service_fd(criu_opts *opts, int fd);
>  
>  void criu_local_set_pid(criu_opts *opts, int pid);
>  void criu_local_set_images_dir_fd(criu_opts *opts, int fd); /* must be set for dump/restore */
> -void criu_local_set_parent_images(criu_opts *opts, char *path);
> +void criu_local_set_parent_images(criu_opts *opts, const char *path);
>  void criu_local_set_service_binary(criu_opts *opts, const char *path);
>  void criu_local_set_work_dir_fd(criu_opts *opts, int fd);
>  void criu_local_set_leave_running(criu_opts *opts, bool leave_running);
> @@ -186,29 +186,29 @@ void criu_local_set_auto_dedup(criu_opts *opts, bool auto_dedup);
>  void criu_local_set_force_irmap(criu_opts *opts, bool force_irmap);
>  void criu_local_set_link_remap(criu_opts *opts, bool link_remap);
>  void criu_local_set_log_level(criu_opts *opts, int log_level);
> -void criu_local_set_log_file(criu_opts *opts, char *log_file);
> +void criu_local_set_log_file(criu_opts *opts, const char *log_file);
>  void criu_local_set_cpu_cap(criu_opts *opts, unsigned int cap);
> -void criu_local_set_root(criu_opts *opts, char *root);
> +void criu_local_set_root(criu_opts *opts, const char *root);
>  void criu_local_set_manage_cgroups(criu_opts *opts, bool manage);
>  void criu_local_set_manage_cgroups_mode(criu_opts *opts, enum criu_cg_mode mode);
> -void criu_local_set_freeze_cgroup(criu_opts *opts, char *name);
> +void criu_local_set_freeze_cgroup(criu_opts *opts, const char *name);
>  void criu_local_set_timeout(criu_opts *opts, unsigned int timeout);
>  void criu_local_set_auto_ext_mnt(criu_opts *opts, bool val);
>  void criu_local_set_ext_sharing(criu_opts *opts, bool val);
>  void criu_local_set_ext_masters(criu_opts *opts, bool val);
>  int criu_local_set_exec_cmd(criu_opts *opts, int argc, char *argv[]);
> -int criu_local_add_ext_mount(criu_opts *opts, char *key, char *val);
> -int criu_local_add_veth_pair(criu_opts *opts, char *in, char *out);
> -int criu_local_add_cg_root(criu_opts *opts, char *ctrl, char *path);
> -int criu_local_add_enable_fs(criu_opts *opts, char *fs);
> -int criu_local_add_skip_mnt(criu_opts *opts, char *mnt);
> +int criu_local_add_ext_mount(criu_opts *opts, const char *key, const char *val);
> +int criu_local_add_veth_pair(criu_opts *opts, const char *in, const char *out);
> +int criu_local_add_cg_root(criu_opts *opts, const char *ctrl, const char *path);
> +int criu_local_add_enable_fs(criu_opts *opts, const char *fs);
> +int criu_local_add_skip_mnt(criu_opts *opts, const char *mnt);
>  void criu_local_set_ghost_limit(criu_opts *opts, unsigned int limit);
> -int criu_local_add_irmap_path(criu_opts *opts, char *path);
> -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);
> +int criu_local_add_irmap_path(criu_opts *opts, const char *path);
> +int criu_local_add_cg_props(criu_opts *opts, const char *stream);
> +int criu_local_add_cg_props_file(criu_opts *opts, const char *path);
> +int criu_local_add_cg_dump_controller(criu_opts *opts, const char *name);
> +int criu_local_add_inherit_fd(criu_opts *opts, int fd, const char *key);
> +int criu_local_add_external(criu_opts *opts, const char *key);
>  
>  void criu_local_set_notify_cb(criu_opts *opts, int (*cb)(char *action, criu_notify_arg_t na));
>  
> -- 
> 2.19.2
> 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list