@@ -64,28 +64,25 @@ void Process_fillStarttimeBuffer(Process* this) {
64
64
*/
65
65
#define TASK_COMM_LEN 16
66
66
67
- static bool findCommInCmdline (const char * comm , const char * cmdline , int cmdlineBasenameStart , int * pCommStart , int * pCommLen ) {
67
+ static bool findCommInCmdline (const char * comm , const char * cmdline , size_t cmdlineBasenameStart , size_t * pCommStart , size_t * pCommLen ) {
68
68
/* Try to find procComm in tokenized cmdline - this might in rare cases
69
69
* mis-identify a string or fail, if comm or cmdline had been unsuitably
70
70
* modified by the process */
71
71
const char * tokenBase ;
72
72
size_t tokenLen ;
73
73
const size_t commLen = strlen (comm );
74
74
75
- if (cmdlineBasenameStart < 0 )
76
- return false;
77
-
78
75
for (const char * token = cmdline + cmdlineBasenameStart ; * token ;) {
79
76
for (tokenBase = token ; * token && * token != '\n' ; ++ token ) {
80
77
if (* token == '/' ) {
81
78
tokenBase = token + 1 ;
82
79
}
83
80
}
84
- tokenLen = token - tokenBase ;
81
+ tokenLen = ( size_t )( token - tokenBase ) ;
85
82
86
83
if ((tokenLen == commLen || (tokenLen > commLen && commLen == (TASK_COMM_LEN - 1 ))) &&
87
84
strncmp (tokenBase , comm , commLen ) == 0 ) {
88
- * pCommStart = tokenBase - cmdline ;
85
+ * pCommStart = ( size_t )( tokenBase - cmdline ) ;
89
86
* pCommLen = tokenLen ;
90
87
return true;
91
88
}
@@ -99,8 +96,8 @@ static bool findCommInCmdline(const char* comm, const char* cmdline, int cmdline
99
96
return false;
100
97
}
101
98
102
- static int matchCmdlinePrefixWithExeSuffix (const char * cmdline , int * cmdlineBasenameStart , const char * exe , int exeBaseOffset , int exeBaseLen ) {
103
- int matchLen ; /* matching length to be returned */
99
+ static size_t matchCmdlinePrefixWithExeSuffix (const char * cmdline , size_t * cmdlineBasenameStart , const char * exe , size_t exeBaseOffset , size_t exeBaseLen ) {
100
+ size_t matchLen ; /* matching length to be returned */
104
101
105
102
/* cmdline prefix is an absolute path: it must match whole exe. */
106
103
if (cmdline [0 ] == '/' ) {
@@ -126,7 +123,7 @@ static int matchCmdlinePrefixWithExeSuffix(const char* cmdline, int* cmdlineBase
126
123
*
127
124
* So if needed, we adjust cmdlineBaseOffset to the previous (if any)
128
125
* component of the cmdline relative path, and retry the procedure. */
129
- int cmdlineBaseOffset = * cmdlineBasenameStart ;
126
+ size_t cmdlineBaseOffset = * cmdlineBasenameStart ;
130
127
bool delimFound = true; /* if valid basename delimiter found */
131
128
do {
132
129
/* match basename */
@@ -135,14 +132,14 @@ static int matchCmdlinePrefixWithExeSuffix(const char* cmdline, int* cmdlineBase
135
132
strncmp (cmdline + cmdlineBaseOffset , exe + exeBaseOffset , exeBaseLen ) == 0 ) {
136
133
char delim = cmdline [matchLen ];
137
134
if (delim == 0 || delim == '\n' || delim == ' ' ) {
138
- int i , j ;
135
+ size_t i , j ;
139
136
/* reverse match the cmdline prefix and exe suffix */
140
137
for (i = cmdlineBaseOffset - 1 , j = exeBaseOffset - 1 ;
141
- i >= 0 && j >= 0 && cmdline [i ] == exe [j ]; -- i , -- j )
138
+ i != ( size_t ) -1 && j != ( size_t ) -1 && cmdline [i ] == exe [j ]; -- i , -- j )
142
139
;
143
140
144
141
/* full match, with exe suffix being a valid relative path */
145
- if (i < 0 && j >= 0 && exe [j ] == '/' ) {
142
+ if (i == ( size_t ) -1 && j != ( size_t ) -1 && exe [j ] == '/' ) {
146
143
* cmdlineBasenameStart = cmdlineBaseOffset ;
147
144
return matchLen ;
148
145
}
@@ -152,6 +149,9 @@ static int matchCmdlinePrefixWithExeSuffix(const char* cmdline, int* cmdlineBase
152
149
/* Try to find the previous potential cmdlineBaseOffset - it would be
153
150
* preceded by '/' or nothing, and delimited by ' ' or '\n' */
154
151
delimFound = false;
152
+ if (cmdlineBaseOffset <= 2 ) {
153
+ return 0 ;
154
+ }
155
155
for (cmdlineBaseOffset -= 2 ; cmdlineBaseOffset > 0 ; -- cmdlineBaseOffset ) {
156
156
if (delimFound ) {
157
157
if (cmdline [cmdlineBaseOffset - 1 ] == '/' ) {
@@ -312,8 +312,8 @@ void Process_makeCommandStr(Process* this, const Settings* settings) {
312
312
char * strStart = mc -> str ;
313
313
char * str = strStart ;
314
314
315
- int cmdlineBasenameStart = this -> cmdlineBasenameStart ;
316
- int cmdlineBasenameLen = 0 ;
315
+ size_t cmdlineBasenameStart = this -> cmdlineBasenameStart ;
316
+ size_t cmdlineBasenameLen = 0 ;
317
317
if (this -> cmdlineBasenameEnd > this -> cmdlineBasenameStart )
318
318
cmdlineBasenameLen = this -> cmdlineBasenameEnd - this -> cmdlineBasenameStart ;
319
319
@@ -323,20 +323,18 @@ void Process_makeCommandStr(Process* this, const Settings* settings) {
323
323
cmdline = "(zombie)" ;
324
324
}
325
325
326
- assert (cmdlineBasenameStart >= 0 );
327
- assert (cmdlineBasenameStart <= (int )strlen (cmdline ));
326
+ assert (cmdlineBasenameStart <= strlen (cmdline ));
328
327
329
- int exeLen = 0 ;
330
- int exeBasenameOffset = 0 ;
331
- int exeBasenameLen = 0 ;
332
- int matchLen = 0 ;
328
+ size_t exeLen = 0 ;
329
+ size_t exeBasenameOffset = 0 ;
330
+ size_t exeBasenameLen = 0 ;
331
+ size_t matchLen = 0 ;
333
332
if (procExe ) {
334
333
exeLen = strlen (procExe );
335
334
exeBasenameOffset = this -> procExeBasenameOffset ;
336
335
exeBasenameLen = exeLen - exeBasenameOffset ;
337
336
338
- assert (exeBasenameOffset >= 0 );
339
- assert (exeBasenameOffset <= (int )strlen (procExe ));
337
+ assert (exeBasenameOffset <= strlen (procExe ));
340
338
341
339
if (this -> cmdline ) {
342
340
matchLen = matchCmdlinePrefixWithExeSuffix (this -> cmdline , & cmdlineBasenameStart , procExe , exeBasenameOffset , exeBasenameLen );
@@ -376,7 +374,7 @@ void Process_makeCommandStr(Process* this, const Settings* settings) {
376
374
return ;
377
375
}
378
376
379
- int commLen = 0 ;
377
+ size_t commLen = 0 ;
380
378
381
379
bool haveCommInExe = false;
382
380
if (procExe && procComm && (!Process_isUserlandThread (this ) || showThreadNames )) {
@@ -387,7 +385,7 @@ void Process_makeCommandStr(Process* this, const Settings* settings) {
387
385
}
388
386
389
387
bool haveCommInCmdline = false;
390
- int commStart = 0 ;
388
+ size_t commStart = 0 ;
391
389
392
390
if (!haveCommInExe && this -> cmdline && procComm && searchCommInCmdline && (!Process_isUserlandThread (this ) || showThreadNames )) {
393
391
haveCommInCmdline = findCommInCmdline (procComm , cmdline , cmdlineBasenameStart , & commStart , & commLen );
@@ -471,20 +469,20 @@ void Process_writeCommand(const Process* this, int attr, int baseAttr, RichStrin
471
469
const ProcessMergedCommand * mc = & this -> mergedCommand ;
472
470
const char * mergedCommand = mc -> str ;
473
471
474
- int strStart = RichString_size (str );
472
+ size_t strStart = RichString_size (str );
475
473
476
474
const Settings * settings = this -> super .host -> settings ;
477
475
const bool highlightBaseName = settings -> highlightBaseName ;
478
476
const bool highlightSeparator = true;
479
477
const bool highlightDeleted = settings -> highlightDeletedExe ;
480
478
481
479
if (!mergedCommand ) {
482
- int len = 0 ;
480
+ size_t len = 0 ;
483
481
const char * cmdline = this -> cmdline ;
484
482
485
483
if (highlightBaseName || !settings -> showProgramPath ) {
486
- int basename = 0 ;
487
- for (int i = 0 ; i < this -> cmdlineBasenameEnd ; i ++ ) {
484
+ size_t basename = 0 ;
485
+ for (size_t i = 0 ; i < this -> cmdlineBasenameEnd ; i ++ ) {
488
486
if (cmdline [i ] == '/' ) {
489
487
basename = i + 1 ;
490
488
} else if (cmdline [i ] == ':' ) {
@@ -876,7 +874,7 @@ bool Process_rowMatchesFilter(const Row* super, const Table* table) {
876
874
void Process_init (Process * this , const Machine * host ) {
877
875
Row_init (& this -> super , host );
878
876
879
- this -> cmdlineBasenameEnd = -1 ;
877
+ this -> cmdlineBasenameEnd = 0 ;
880
878
this -> st_uid = (uid_t )- 1 ;
881
879
}
882
880
@@ -1028,12 +1026,12 @@ void Process_updateComm(Process* this, const char* comm) {
1028
1026
this -> mergedCommand .lastUpdate = 0 ;
1029
1027
}
1030
1028
1031
- static int skipPotentialPath (const char * cmdline , int end ) {
1029
+ static size_t skipPotentialPath (const char * cmdline , size_t end ) {
1032
1030
if (cmdline [0 ] != '/' )
1033
1031
return 0 ;
1034
1032
1035
- int slash = 0 ;
1036
- for (int i = 1 ; i < end ; i ++ ) {
1033
+ size_t slash = 0 ;
1034
+ for (size_t i = 1 ; i < end ; i ++ ) {
1037
1035
if (cmdline [i ] == '/' && cmdline [i + 1 ] != '\0' ) {
1038
1036
slash = i + 1 ;
1039
1037
continue ;
@@ -1049,11 +1047,10 @@ static int skipPotentialPath(const char* cmdline, int end) {
1049
1047
return slash ;
1050
1048
}
1051
1049
1052
- void Process_updateCmdline (Process * this , const char * cmdline , int basenameStart , int basenameEnd ) {
1053
- assert (basenameStart >= 0 );
1054
- assert ((cmdline && basenameStart < (int )strlen (cmdline )) || (!cmdline && basenameStart == 0 ));
1050
+ void Process_updateCmdline (Process * this , const char * cmdline , size_t basenameStart , size_t basenameEnd ) {
1051
+ assert ((cmdline && basenameStart < strlen (cmdline )) || (!cmdline && basenameStart == 0 ));
1055
1052
assert ((basenameEnd > basenameStart ) || (basenameEnd == 0 && basenameStart == 0 ));
1056
- assert ((cmdline && basenameEnd <= ( int ) strlen (cmdline )) || (!cmdline && basenameEnd == 0 ));
1053
+ assert ((cmdline && basenameEnd <= strlen (cmdline )) || (!cmdline && basenameEnd == 0 ));
1057
1054
1058
1055
if (!this -> cmdline && !cmdline )
1059
1056
return ;
@@ -1086,7 +1083,7 @@ void Process_updateExe(Process* this, const char* exe) {
1086
1083
if (exe ) {
1087
1084
this -> procExe = xStrdup (exe );
1088
1085
const char * lastSlash = strrchr (exe , '/' );
1089
- this -> procExeBasenameOffset = (lastSlash && * (lastSlash + 1 ) != '\0' && lastSlash != exe ) ? (lastSlash - exe + 1 ) : 0 ;
1086
+ this -> procExeBasenameOffset = (lastSlash && * (lastSlash + 1 ) != '\0' && lastSlash != exe ) ? (size_t )( lastSlash - exe + 1 ) : 0 ;
1090
1087
} else {
1091
1088
this -> procExe = NULL ;
1092
1089
this -> procExeBasenameOffset = 0 ;
0 commit comments