Lines Matching refs:nsi
63 int nsinfo__init(struct nsinfo *nsi)
78 if (asprintf(&newns, "/proc/%d/ns/mnt", nsi->pid) == -1)
91 nsi->need_setns = true;
92 nsi->mntns_path = newns;
99 if (snprintf(spath, PATH_MAX, "/proc/%d/status", nsi->pid) >= PATH_MAX)
109 nsi->tgid = (pid_t)strtol(strrchr(statln, '\t'),
111 nsi->nstgid = nsi->tgid;
115 nsi->nstgid = (pid_t)strtol(strrchr(statln, '\t'),
132 struct nsinfo *nsi;
137 nsi = calloc(1, sizeof(*nsi));
138 if (nsi != NULL) {
139 nsi->pid = pid;
140 nsi->tgid = pid;
141 nsi->nstgid = pid;
142 nsi->need_setns = false;
147 if (nsinfo__init(nsi) == -1)
148 nsi->need_setns = false;
150 refcount_set(&nsi->refcnt, 1);
153 return nsi;
156 struct nsinfo *nsinfo__copy(struct nsinfo *nsi)
160 if (nsi == NULL)
165 nnsi->pid = nsi->pid;
166 nnsi->tgid = nsi->tgid;
167 nnsi->nstgid = nsi->nstgid;
168 nnsi->need_setns = nsi->need_setns;
169 if (nsi->mntns_path) {
170 nnsi->mntns_path = strdup(nsi->mntns_path);
182 void nsinfo__delete(struct nsinfo *nsi)
184 zfree(&nsi->mntns_path);
185 free(nsi);
188 struct nsinfo *nsinfo__get(struct nsinfo *nsi)
190 if (nsi)
191 refcount_inc(&nsi->refcnt);
192 return nsi;
195 void nsinfo__put(struct nsinfo *nsi)
197 if (nsi && refcount_dec_and_test(&nsi->refcnt))
198 nsinfo__delete(nsi);
201 void nsinfo__mountns_enter(struct nsinfo *nsi,
215 if (!nsi || !nsi->need_setns)
229 newns = open(nsi->mntns_path, O_RDONLY);
272 char *nsinfo__realpath(const char *path, struct nsinfo *nsi)
277 nsinfo__mountns_enter(nsi, &nsc);