rid lousy getarg parser in favor of CommandLineToArgvW
This commit is contained in:
		
							parent
							
								
									2e8f6226e3
								
							
						
					
					
						commit
						63924059e2
					
				@ -80,13 +80,17 @@ int sigar_proc_exe_peb_get(sigar_t *sigar, HANDLE proc,
 | 
				
			|||||||
    return SIGAR_OK;
 | 
					    return SIGAR_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int sigar_parse_proc_args(sigar_t *sigar, WCHAR *buf,
 | 
					int sigar_parse_proc_args(sigar_t *sigar, WCHAR *buf,
 | 
				
			||||||
                          sigar_proc_args_t *procargs)
 | 
					                          sigar_proc_args_t *procargs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    char arg[SIGAR_CMDLINE_MAX];
 | 
					    char arg[SIGAR_CMDLINE_MAX];
 | 
				
			||||||
    LPWSTR *args;
 | 
					    LPWSTR *args;
 | 
				
			||||||
    int num, i;
 | 
					    int num, i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!buf) {
 | 
				
			||||||
 | 
					        buf = GetCommandLine();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sigar_proc_args_create(procargs);
 | 
					    sigar_proc_args_create(procargs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    args = CommandLineToArgvW(buf, &num);
 | 
					    args = CommandLineToArgvW(buf, &num);
 | 
				
			||||||
 | 
				
			|||||||
@ -127,6 +127,9 @@ int sigar_proc_exe_peb_get(sigar_t *sigar, HANDLE proc,
 | 
				
			|||||||
int sigar_proc_args_peb_get(sigar_t *sigar, HANDLE proc,
 | 
					int sigar_proc_args_peb_get(sigar_t *sigar, HANDLE proc,
 | 
				
			||||||
                            sigar_proc_args_t *procargs);
 | 
					                            sigar_proc_args_t *procargs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int sigar_parse_proc_args(sigar_t *sigar, WCHAR *buf,
 | 
				
			||||||
 | 
					                          sigar_proc_args_t *procargs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned int sigar_cpu_count(sigar_t *sigar);
 | 
					unsigned int sigar_cpu_count(sigar_t *sigar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int sigar_cpu_info_get(sigar_t *sigar, sigar_cpu_info_t *info);
 | 
					int sigar_cpu_info_get(sigar_t *sigar, sigar_cpu_info_t *info);
 | 
				
			||||||
 | 
				
			|||||||
@ -760,55 +760,6 @@ static int get_proc_info(sigar_t *sigar, sigar_pid_t pid)
 | 
				
			|||||||
    return -1; /*XXX*/
 | 
					    return -1; /*XXX*/
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static char *getarg(char **line)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    char *str = *line, *end;
 | 
					 | 
				
			||||||
    char *res;
 | 
					 | 
				
			||||||
    int len;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (*str && isspace(*str)) {
 | 
					 | 
				
			||||||
        ++str;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!*str) {
 | 
					 | 
				
			||||||
        *line = str;
 | 
					 | 
				
			||||||
        return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (*str == '"') {
 | 
					 | 
				
			||||||
        end = str + 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        while (*end && (*end != '"')) {
 | 
					 | 
				
			||||||
            ++end;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        len = end - str - 1;
 | 
					 | 
				
			||||||
        res = malloc(len+1);
 | 
					 | 
				
			||||||
        memcpy(res, str+1, len);
 | 
					 | 
				
			||||||
        res[len] = '\0';
 | 
					 | 
				
			||||||
        end++;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else {
 | 
					 | 
				
			||||||
        end = str;
 | 
					 | 
				
			||||||
        while (*end && !isspace(*end)) {
 | 
					 | 
				
			||||||
            ++end;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        len = end - str;
 | 
					 | 
				
			||||||
        res = malloc(len+1);
 | 
					 | 
				
			||||||
        memcpy(res, str, len);
 | 
					 | 
				
			||||||
        res[len] = '\0';
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (*end && isspace(*end)) {
 | 
					 | 
				
			||||||
        ++end;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    *line = end;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return res;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
 | 
					static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
 | 
				
			||||||
                                      sigar_proc_args_t *procargs)
 | 
					                                      sigar_proc_args_t *procargs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -827,27 +778,11 @@ static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
 | 
				
			|||||||
    return status;
 | 
					    return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int sigar_local_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
 | 
					 | 
				
			||||||
                                     sigar_proc_args_t *procargs)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    LPTSTR cmdline = GetCommandLine();
 | 
					 | 
				
			||||||
    char *arg, *ptr = cmdline;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    sigar_proc_args_create(procargs);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (*ptr && (arg = getarg(&ptr))) {
 | 
					 | 
				
			||||||
        SIGAR_PROC_ARGS_GROW(procargs);
 | 
					 | 
				
			||||||
        procargs->data[procargs->number++] = arg;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return SIGAR_OK;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SIGAR_DECLARE(int) sigar_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
 | 
					SIGAR_DECLARE(int) sigar_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
 | 
				
			||||||
                                       sigar_proc_args_t *procargs)
 | 
					                                       sigar_proc_args_t *procargs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (pid == sigar->pid) {
 | 
					    if (pid == sigar->pid) {
 | 
				
			||||||
        return sigar_local_proc_args_get(sigar, pid, procargs);
 | 
					        return sigar_parse_proc_args(sigar, NULL, procargs);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
        return sigar_remote_proc_args_get(sigar, pid, procargs);
 | 
					        return sigar_remote_proc_args_get(sigar, pid, procargs);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user