return ((*str >= '0' && *str <= '9') || (*str >= 'a' && *str <= 'f'));
}
-static unsigned long get_gpu_mem_size(FILE *smaps_fd, char *entry)
+#define LEN_FORMAT(S) "%" #S "[^\n]"
+#define STR_LEN_FORMAT(S) LEN_FORMAT(S)
+
+static unsigned long get_gpu_mem_size(FILE *smaps_fd, char *buffer)
{
unsigned long mem_size = 0;
char name[BUFF_MAX];
- char buffer[BUFF_MAX];
if (!gpu_mem_node)
return 0;
new_entry:
- sscanf(entry, "%*s %*s %*s %*s %*s %[^\n]", name);
+ /* parsing name from entry line */
+ sscanf(buffer, "%*s %*s %*s %*s %*s" STR_LEN_FORMAT(BUFF_MAX), name);
- if (strstr(name, gpu_mem_node->path)) {
- while (fgets(buffer, sizeof(buffer), smaps_fd)) {
- if (strstr(buffer, gpu_mem_node->node))
- mem_size += strtol(buffer + strlen(gpu_mem_node->node), NULL, 10);
+ if (!strstr(name, gpu_mem_node->path))
+ return mem_size;
- if (is_new_entry(buffer)) {
- entry = buffer;
- goto new_entry;
- }
- }
+ while (fgets(buffer, BUFF_MAX, smaps_fd)) {
+ if (strstr(buffer, gpu_mem_node->node))
+ mem_size += strtol(buffer + strlen(gpu_mem_node->node), NULL, 10);
+ else if (is_new_entry(buffer))
+ goto new_entry;
}
return mem_size;
memset(map_info, 0, sizeof(struct proc_map_info));
while (fgets(buffer, sizeof(buffer), smaps_fd)) {
- if (include_gpu_mem && is_new_entry(buffer))
+ if (include_gpu_mem && is_new_entry(buffer)) {
map_info->gpu_mem += get_gpu_mem_size(smaps_fd, buffer);
+ continue;
+ }
if (strstart(buffer, "Rss:"))
map_info->rss += strtol(buffer + 4, NULL, 10);