proc_modules impl
This commit is contained in:
		
							parent
							
								
									2672fc8219
								
							
						
					
					
						commit
						018f634896
					
				| @ -835,7 +835,45 @@ int sigar_proc_exe_get(sigar_t *sigar, sigar_pid_t pid, | |||||||
| int sigar_proc_modules_get(sigar_t *sigar, sigar_pid_t pid, | int sigar_proc_modules_get(sigar_t *sigar, sigar_pid_t pid, | ||||||
|                            sigar_proc_modules_t *procmods) |                            sigar_proc_modules_t *procmods) | ||||||
| { | { | ||||||
|     return SIGAR_ENOTIMPL; |     FILE *fp; | ||||||
|  |     char buffer[BUFSIZ], *ptr; | ||||||
|  |     unsigned long inode, last_inode = 0; | ||||||
|  | 
 | ||||||
|  |     (void)SIGAR_PROC_FILENAME(buffer, pid, "/maps"); | ||||||
|  | 
 | ||||||
|  |     if (!(fp = fopen(buffer, "r"))) { | ||||||
|  |         return errno; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     while ((ptr = fgets(buffer, sizeof(buffer), fp))) { | ||||||
|  |         int len; | ||||||
|  |         /* skip region, flags, offset, dev */ | ||||||
|  |         ptr = sigar_skip_multiple_token(ptr, 4); | ||||||
|  |         inode = sigar_strtoul(ptr); | ||||||
|  | 
 | ||||||
|  |         if ((inode == 0) || (inode == last_inode)) { | ||||||
|  |             last_inode = 0; | ||||||
|  |             continue; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         last_inode = inode; | ||||||
|  |         SIGAR_SKIP_SPACE(ptr); | ||||||
|  |         len = strlen(ptr); | ||||||
|  |         ptr[len-1] = '\0'; /* chop \n */ | ||||||
|  | 
 | ||||||
|  |         int status = | ||||||
|  |             procmods->module_getter(procmods->data, | ||||||
|  |                                     ptr, len-1); | ||||||
|  | 
 | ||||||
|  |         if (status != SIGAR_OK) { | ||||||
|  |             /* not an error; just stop iterating */ | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     fclose(fp); | ||||||
|  | 
 | ||||||
|  |     return SIGAR_OK; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #include <mntent.h> | #include <mntent.h> | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Doug MacEachern
						Doug MacEachern