Lines Matching defs:p
69 proc_getpid(struct imsgproc *p)
71 return p->pid;
75 proc_gettype(struct imsgproc *p)
77 return p->type;
81 proc_getinstance(struct imsgproc *p)
83 return p->instance;
87 proc_gettitle(struct imsgproc *p)
89 return p->title;
95 struct imsgproc *p;
97 TAILQ_FOREACH(p, &procs, tqe)
98 if (pid == p->pid)
99 return p;
107 struct imsgproc *p;
111 p = proc_new(type);
112 if (p == NULL) {
119 proc_free(p);
128 proc_free(p);
134 p->pid = pid;
135 proc_setsock(p, sp[1]);
136 return p;
152 struct imsgproc *p;
154 p = proc_new(type);
155 if (p == NULL)
158 proc_setsock(p, fd);
159 return p;
163 proc_settitle(struct imsgproc *p, const char *title)
165 free(p->title);
167 p->title = strdup(title);
168 if (p->title == NULL)
172 p->title = NULL;
176 proc_setpid(struct imsgproc *p, pid_t pid)
178 p->pid = pid;
182 proc_setcallback(struct imsgproc *p,
185 p->cb = cb;
186 p->arg = arg;
190 proc_enable(struct imsgproc *p)
192 proc_event_add(p);
196 proc_free(struct imsgproc *p)
198 if (p == NULL)
201 TAILQ_REMOVE(&procs, p, tqe);
203 if (event_initialized(&p->ev))
204 event_del(&p->ev);
205 close(p->imsgbuf.fd);
206 imsgbuf_clear(&p->imsgbuf);
207 free(p->title);
208 free(p);
214 struct imsgproc *p;
216 p = calloc(1, sizeof(*p));
217 if (p == NULL)
220 if (imsgbuf_init(&p->imsgbuf, -1) == -1) {
221 free(p);
224 imsgbuf_allow_fdpass(&p->imsgbuf);
226 p->type = type;
227 p->instance = -1;
228 p->pid = -1;
230 TAILQ_INSERT_TAIL(&procs, p, tqe);
232 return p;
236 proc_setsock(struct imsgproc *p, int sock)
238 p->imsgbuf.fd = sock;
242 proc_event_add(struct imsgproc *p)
247 if (imsgbuf_queuelen(&p->imsgbuf) > 0)
250 if (p->events)
251 event_del(&p->ev);
253 p->events = events;
255 event_set(&p->ev, p->imsgbuf.fd, events, proc_dispatch, p);
256 event_add(&p->ev, NULL);
261 proc_callback(struct imsgproc *p, struct imsg *imsg)
264 p->m_in.pos = imsg->data;
265 p->m_in.end = p->m_in.pos + (imsg->hdr.len - sizeof(imsg->hdr));
268 p->m_in.pos = NULL;
269 p->m_in.end = NULL;
272 p->cb(p, imsg, p->arg);
278 struct imsgproc *p = arg;
282 p->events = 0;
285 n = imsgbuf_read(&p->imsgbuf);
289 proc_callback(p, NULL);
293 proc_callback(p, NULL);
301 if (imsgbuf_write(&p->imsgbuf) == -1) {
304 proc_callback(p, NULL);
310 if ((n = imsg_get(&p->imsgbuf, &imsg)) == -1) {
312 proc_callback(p, NULL);
318 proc_callback(p, &imsg);
322 proc_event_add(p);
326 m_compose(struct imsgproc *p, uint32_t type, uint32_t peerid, pid_t pid, int fd,
329 if (imsg_compose(&p->imsgbuf, type, peerid, pid, fd, data, len) == -1)
332 proc_event_add(p);
336 m_create(struct imsgproc *p, uint32_t type, uint32_t peerid, pid_t pid, int fd)
338 p->m_out.pos = 0;
339 p->m_out.type = type;
340 p->m_out.peerid = peerid;
341 p->m_out.pid = pid;
342 p->m_out.fd = fd;
346 m_close(struct imsgproc *p)
348 if (imsg_compose(&p->imsgbuf, p->m_out.type, p->m_out.peerid,
349 p->m_out.pid, p->m_out.fd, p->m_out.buf, p->m_out.pos) == -1)
352 proc_event_add(p);
356 m_add(struct imsgproc *p, const void *data, size_t len)
361 if (p->m_out.pos + len + IMSG_HEADER_SIZE > MAX_IMSGSIZE)
364 alloc = p->m_out.alloc ? p->m_out.alloc : 128;
365 while (p->m_out.pos + len > alloc)
367 if (alloc != p->m_out.alloc) {
368 tmp = recallocarray(p->m_out.buf, p->m_out.alloc, alloc, 1);
371 p->m_out.alloc = alloc;
372 p->m_out.buf = tmp;
375 memmove(p->m_out.buf + p->m_out.pos, data, len);
376 p->m_out.pos += len;
380 m_add_int(struct imsgproc *p, int v)
382 m_add(p, &v, sizeof(v));
386 m_add_u32(struct imsgproc *p, uint32_t v)
388 m_add(p, &v, sizeof(v));
392 m_add_u64(struct imsgproc *p, uint64_t v)
394 m_add(p, &v, sizeof(v));
398 m_add_size(struct imsgproc *p, size_t v)
400 m_add(p, &v, sizeof(v));
404 m_add_time(struct imsgproc *p, time_t v)
406 m_add(p, &v, sizeof(v));
410 m_add_string(struct imsgproc *p, const char *str)
413 m_add(p, "s", 1);
414 m_add(p, str, strlen(str) + 1);
417 m_add(p, "\0", 1);
421 m_add_sockaddr(struct imsgproc *p, const struct sockaddr *sa)
423 m_add_size(p, sa->sa_len);
424 m_add(p, sa, sa->sa_len);
428 m_end(struct imsgproc *p)
430 if (p->m_in.pos != p->m_in.end)
432 p->m_in.end - p->m_in.pos);
436 m_is_eom(struct imsgproc *p)
438 return (p->m_in.pos == p->m_in.end);
442 m_get(struct imsgproc *p, void *dst, size_t sz)
445 p->m_in.end - p->m_in.pos < (ssize_t)sz )
447 p->m_in.end - p->m_in.pos);
449 memmove(dst, p->m_in.pos, sz);
450 p->m_in.pos += sz;
454 m_get_int(struct imsgproc *p, int *dst)
456 m_get(p, dst, sizeof(*dst));
460 m_get_u32(struct imsgproc *p, uint32_t *dst)
462 m_get(p, dst, sizeof(*dst));
466 m_get_u64(struct imsgproc *p, uint64_t *dst)
468 m_get(p, dst, sizeof(*dst));
472 m_get_size(struct imsgproc *p, size_t *dst)
474 m_get(p, dst, sizeof(*dst));
478 m_get_time(struct imsgproc *p, time_t *dst)
480 m_get(p, dst, sizeof(*dst));
484 m_get_string(struct imsgproc *p, const char **dst)
488 if (p->m_in.pos >= p->m_in.end)
491 c = *p->m_in.pos++;
497 if (p->m_in.pos >= p->m_in.end)
499 end = memchr(p->m_in.pos, 0, p->m_in.end - p->m_in.pos);
503 *dst = p->m_in.pos;
504 p->m_in.pos = end + 1;
508 m_get_sockaddr(struct imsgproc *p, struct sockaddr *dst)
512 m_get_size(p, &len);
513 m_get(p, dst, len);