4 #include "thread_map.h"
6 /* Skip "." and ".." directories */
7 static int filter(const struct dirent
*dir
)
9 if (dir
->d_name
[0] == '.')
15 struct thread_map
*thread_map__new_by_pid(pid_t pid
)
17 struct thread_map
*threads
;
20 struct dirent
**namelist
= NULL
;
23 sprintf(name
, "/proc/%d/task", pid
);
24 items
= scandir(name
, &namelist
, filter
, NULL
);
28 threads
= malloc(sizeof(*threads
) + sizeof(pid_t
) * items
);
29 if (threads
!= NULL
) {
30 for (i
= 0; i
< items
; i
++)
31 threads
->map
[i
] = atoi(namelist
[i
]->d_name
);
35 for (i
=0; i
<items
; i
++)
42 struct thread_map
*thread_map__new_by_tid(pid_t tid
)
44 struct thread_map
*threads
= malloc(sizeof(*threads
) + sizeof(pid_t
));
46 if (threads
!= NULL
) {
47 threads
->map
[0] = tid
;
54 struct thread_map
*thread_map__new(pid_t pid
, pid_t tid
)
57 return thread_map__new_by_pid(pid
);
58 return thread_map__new_by_tid(tid
);
61 void thread_map__delete(struct thread_map
*threads
)