static int freeze_unfreeze(const char *name, int freeze, const char *lxcpath) { char *cgabspath; int ret; cgabspath = lxc_cgroup_get_hierarchy_abs_path("freezer", name, lxcpath); if (!cgabspath) return -1; ret = do_unfreeze(cgabspath, freeze, name, lxcpath); free(cgabspath); return ret; }
static lxc_state_t freezer_state(const char *name, const char *lxcpath) { char *cgabspath = NULL; char freezer[MAXPATHLEN]; char status[MAXPATHLEN]; FILE *file; int ret; cgabspath = lxc_cgroup_get_hierarchy_abs_path("freezer", name, lxcpath); if (!cgabspath) return -1; ret = snprintf(freezer, MAXPATHLEN, "%s/freezer.state", cgabspath); if (ret < 0 || ret >= MAXPATHLEN) goto out; process_lock(); file = fopen(freezer, "r"); process_unlock(); if (!file) { ret = -1; goto out; } ret = fscanf(file, "%s", status); process_lock(); fclose(file); process_unlock(); if (ret == EOF) { SYSERROR("failed to read %s", freezer); ret = -1; goto out; } ret = lxc_str2state(status); out: free(cgabspath); return ret; }