5
5
6
6
#include <inttypes.h>
7
7
8
- const char * ffDetectSwap (FFSwapResult * swap )
8
+ const char * ffDetectSwap (FFlist * result )
9
9
{
10
10
// Ref: #620
11
11
char buf [PROC_FILE_BUFFSIZ ];
@@ -20,17 +20,29 @@ const char* ffDetectSwap(FFSwapResult* swap)
20
20
while (line && * ++ line )
21
21
{
22
22
uint64_t total , used ;
23
- if (sscanf (line , "%*[^\t]%" SCNu64 "%" SCNu64 , & total , & used ) != 2 )
23
+ char name [256 ];
24
+ if (sscanf (line , "%255s %*[^\t]%" SCNu64 "%" SCNu64 , name , & total , & used ) != 3 )
24
25
return "Invalid /proc/swaps format found" ;
25
26
26
- swap -> bytesTotal += total ;
27
- swap -> bytesUsed += used ;
27
+ uint32_t nameLen = (uint32_t ) strnlen (name , sizeof (name ));
28
+ FFSwapResult * swap = ffListAdd (result );
29
+ ffStrbufInitA (& swap -> name , nameLen );
30
+ for (size_t i = 0 ; i < nameLen ; ++ i )
31
+ {
32
+ if (name [i ] == '\\' )
33
+ {
34
+ char octal [4 ] = { name [i + 1 ], name [i + 2 ], name [i + 3 ], '\0' };
35
+ ffStrbufAppendC (& swap -> name , (char ) strtol (octal , NULL , 8 ));
36
+ i += 3 ;
37
+ }
38
+ else
39
+ ffStrbufAppendC (& swap -> name , name [i ]);
40
+ }
41
+ swap -> bytesTotal = total * 1024u ;
42
+ swap -> bytesUsed = used * 1024u ;
28
43
29
44
line = memchr (line , '\n' , (size_t ) (nRead - (line - buf )));
30
45
}
31
46
32
- swap -> bytesTotal *= 1024u ;
33
- swap -> bytesUsed *= 1024u ;
34
-
35
47
return NULL ;
36
48
}
0 commit comments