diff options
author | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
commit | 76bcc36ed305418a3ddc5752d287ede894243e1b (patch) | |
tree | bacb320c825768471ce56f058f17ce863d592376 /xorg-server/os/client.c | |
parent | 7d894e32566b710952c44cbc71939ad1d9e2fa8d (diff) | |
parent | 0f834b91a4768673833ab4917e87d86c237bb1a6 (diff) | |
download | vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.gz vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.bz2 vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
pixman/pixman/pixman-mmx.c
xorg-server/Xext/shm.c
xorg-server/Xext/syncsrv.h
xorg-server/Xext/xvmain.c
xorg-server/Xi/exevents.c
xorg-server/Xi/opendev.c
xorg-server/composite/compalloc.c
xorg-server/composite/compoverlay.c
xorg-server/dix/colormap.c
xorg-server/dix/devices.c
xorg-server/dix/dispatch.c
xorg-server/dix/dixfonts.c
xorg-server/dix/eventconvert.c
xorg-server/dix/events.c
xorg-server/dix/gc.c
xorg-server/dix/getevents.c
xorg-server/dix/main.c
xorg-server/dix/privates.c
xorg-server/dix/registry.c
xorg-server/dix/resource.c
xorg-server/exa/exa_accel.c
xorg-server/exa/exa_migration_classic.c
xorg-server/exa/exa_unaccel.c
xorg-server/fb/fb.h
xorg-server/fb/fbcopy.c
xorg-server/fb/fbpixmap.c
xorg-server/glx/dispatch.h
xorg-server/glx/glapi.h
xorg-server/glx/glapi_gentable.c
xorg-server/glx/glapitable.h
xorg-server/glx/glprocs.h
xorg-server/glx/glxcmds.c
xorg-server/glx/glxcmdsswap.c
xorg-server/glx/glxdricommon.c
xorg-server/glx/glxdriswrast.c
xorg-server/glx/glxext.c
xorg-server/glx/indirect_dispatch.c
xorg-server/glx/indirect_dispatch.h
xorg-server/glx/indirect_dispatch_swap.c
xorg-server/glx/indirect_size.h
xorg-server/glx/indirect_size_get.h
xorg-server/glx/indirect_table.c
xorg-server/glx/indirect_util.c
xorg-server/glx/rensize.c
xorg-server/glx/single2swap.c
xorg-server/glx/singlepix.c
xorg-server/glx/singlepixswap.c
xorg-server/glx/singlesize.c
xorg-server/hw/dmx/dmxinit.c
xorg-server/hw/kdrive/ephyr/ephyr.c
xorg-server/hw/kdrive/ephyr/hostx.c
xorg-server/hw/kdrive/ephyr/hostx.h
xorg-server/hw/kdrive/src/kinput.c
xorg-server/hw/xfree86/common/compiler.h
xorg-server/hw/xwin/InitInput.c
xorg-server/hw/xwin/InitOutput.c
xorg-server/hw/xwin/ddraw.h
xorg-server/hw/xwin/glx/glwrap.c
xorg-server/hw/xwin/glx/indirect.c
xorg-server/hw/xwin/glx/wgl_ext_api.h
xorg-server/hw/xwin/glx/winpriv.c
xorg-server/hw/xwin/win.h
xorg-server/hw/xwin/winallpriv.c
xorg-server/hw/xwin/winauth.c
xorg-server/hw/xwin/winclipboard.h
xorg-server/hw/xwin/winclipboardinit.c
xorg-server/hw/xwin/winclipboardthread.c
xorg-server/hw/xwin/winclipboardunicode.c
xorg-server/hw/xwin/winclipboardwndproc.c
xorg-server/hw/xwin/winclipboardwrappers.c
xorg-server/hw/xwin/winclipboardxevents.c
xorg-server/hw/xwin/wincmap.c
xorg-server/hw/xwin/winconfig.c
xorg-server/hw/xwin/wincreatewnd.c
xorg-server/hw/xwin/wincursor.c
xorg-server/hw/xwin/windialogs.c
xorg-server/hw/xwin/winengine.c
xorg-server/hw/xwin/winerror.c
xorg-server/hw/xwin/wingc.c
xorg-server/hw/xwin/wingetsp.c
xorg-server/hw/xwin/winkeybd.c
xorg-server/hw/xwin/winkeybd.h
xorg-server/hw/xwin/winlayouts.h
xorg-server/hw/xwin/winmisc.c
xorg-server/hw/xwin/winmonitors.c
xorg-server/hw/xwin/winmouse.c
xorg-server/hw/xwin/winmsg.c
xorg-server/hw/xwin/winmsg.h
xorg-server/hw/xwin/winmultiwindowclass.c
xorg-server/hw/xwin/winmultiwindowicons.c
xorg-server/hw/xwin/winmultiwindowshape.c
xorg-server/hw/xwin/winmultiwindowwindow.c
xorg-server/hw/xwin/winmultiwindowwm.c
xorg-server/hw/xwin/winmultiwindowwndproc.c
xorg-server/hw/xwin/winnativegdi.c
xorg-server/hw/xwin/winpfbdd.c
xorg-server/hw/xwin/winpixmap.c
xorg-server/hw/xwin/winpolyline.c
xorg-server/hw/xwin/winprefs.c
xorg-server/hw/xwin/winprocarg.c
xorg-server/hw/xwin/winregistry.c
xorg-server/hw/xwin/winscrinit.c
xorg-server/hw/xwin/winsetsp.c
xorg-server/hw/xwin/winshaddd.c
xorg-server/hw/xwin/winshadddnl.c
xorg-server/hw/xwin/winshadgdi.c
xorg-server/hw/xwin/wintrayicon.c
xorg-server/hw/xwin/winwin32rootless.c
xorg-server/hw/xwin/winwin32rootlesswindow.c
xorg-server/hw/xwin/winwin32rootlesswndproc.c
xorg-server/hw/xwin/winwindow.c
xorg-server/hw/xwin/winwindow.h
xorg-server/hw/xwin/winwindowswm.c
xorg-server/hw/xwin/winwndproc.c
xorg-server/include/callback.h
xorg-server/include/dixstruct.h
xorg-server/include/misc.h
xorg-server/include/os.h
xorg-server/include/scrnintstr.h
xorg-server/mi/micmap.c
xorg-server/mi/miinitext.c
xorg-server/mi/mioverlay.c
xorg-server/mi/misprite.c
xorg-server/mi/mivaltree.c
xorg-server/mi/miwindow.c
xorg-server/miext/damage/damage.c
xorg-server/miext/rootless/rootlessGC.c
xorg-server/miext/rootless/rootlessWindow.c
xorg-server/os/WaitFor.c
xorg-server/os/access.c
xorg-server/os/connection.c
xorg-server/os/io.c
xorg-server/os/log.c
xorg-server/os/osinit.c
xorg-server/os/utils.c
xorg-server/os/xdmcp.c
xorg-server/os/xprintf.c
xorg-server/os/xstrans.c
xorg-server/render/mipict.c
xorg-server/xkb/xkbActions.c
xorg-server/xkb/xkbInit.c
xorg-server/xkeyboard-config/compat/default.in
Diffstat (limited to 'xorg-server/os/client.c')
-rw-r--r-- | xorg-server/os/client.c | 120 |
1 files changed, 62 insertions, 58 deletions
diff --git a/xorg-server/os/client.c b/xorg-server/os/client.c index fbccf22ed..ef5e3935d 100644 --- a/xorg-server/os/client.c +++ b/xorg-server/os/client.c @@ -85,7 +85,8 @@ * * @see GetClientPid */ -pid_t DetermineClientPid(struct _Client *client) +pid_t +DetermineClientPid(struct _Client * client) { LocalClientCredRec *lcc = NULL; pid_t pid = -1; @@ -96,8 +97,7 @@ pid_t DetermineClientPid(struct _Client *client) if (client == serverClient) return getpid(); - if (GetLocalClientCreds(client, &lcc) != -1) - { + if (GetLocalClientCreds(client, &lcc) != -1) { if (lcc->fieldsSet & LCC_PID_SET) pid = lcc->pid; FreeLocalClientCreds(lcc); @@ -127,7 +127,8 @@ pid_t DetermineClientPid(struct _Client *client) * * @see GetClientCmdName/Args */ -void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) +void +DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) { char path[PATH_MAX + 1]; int totsize = 0; @@ -141,20 +142,18 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) if (pid == -1) return; -#ifdef __sun /* Solaris */ +#ifdef __sun /* Solaris */ /* Solaris does not support /proc/pid/cmdline, but makes information * similar to what ps shows available in a binary structure in the * /proc/pid/psinfo file. */ if (snprintf(path, sizeof(path), "/proc/%d/psinfo", pid) < 0) return; fd = open(path, O_RDONLY); - if (fd < 0) - { - ErrorF ("Failed to open %s: %s\n", path, strerror(errno)); + if (fd < 0) { + ErrorF("Failed to open %s: %s\n", path, strerror(errno)); return; } - else - { + else { psinfo_t psinfo = { 0 }; char *sp; @@ -170,7 +169,7 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) * the file that was exec'ed, thus cutting off many long gnome * command names, or returning "isapython2.6" for all python scripts. */ - psinfo.pr_psargs[PRARGSZ-1] = '\0'; + psinfo.pr_psargs[PRARGSZ - 1] = '\0'; sp = strchr(psinfo.pr_psargs, ' '); if (sp) *sp++ = '\0'; @@ -184,36 +183,37 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) #elif defined(__OpenBSD__) /* on OpenBSD use kvm_getargv() */ { - kvm_t *kd; - char errbuf[_POSIX2_LINE_MAX]; - char **argv; - struct kinfo_proc *kp; - size_t len = 0; - int i, n; - - kd = kvm_open(NULL, NULL, NULL, KVM_NO_FILES, errbuf); - if (kd == NULL) - return; - kp = kvm_getprocs(kd, KERN_PROC_PID, pid, sizeof(struct kinfo_proc), &n); - if (n != 1) - return; - argv = kvm_getargv(kd, kp, 0); - *cmdname = strdup(argv[0]); - i = 1; - while (argv[i] != NULL) { - len += strlen(argv[i]) + 1; - i++; - } - *cmdargs = calloc(1, len); - i = 1; - while (argv[i] != NULL) { - strlcat(*cmdargs, argv[i], len); - strlcat(*cmdargs, " ", len); - i++; - } - kvm_close(kd); + kvm_t *kd; + char errbuf[_POSIX2_LINE_MAX]; + char **argv; + struct kinfo_proc *kp; + size_t len = 0; + int i, n; + + kd = kvm_open(NULL, NULL, NULL, KVM_NO_FILES, errbuf); + if (kd == NULL) + return; + kp = kvm_getprocs(kd, KERN_PROC_PID, pid, sizeof(struct kinfo_proc), + &n); + if (n != 1) + return; + argv = kvm_getargv(kd, kp, 0); + *cmdname = strdup(argv[0]); + i = 1; + while (argv[i] != NULL) { + len += strlen(argv[i]) + 1; + i++; + } + *cmdargs = calloc(1, len); + i = 1; + while (argv[i] != NULL) { + strlcat(*cmdargs, argv[i], len); + strlcat(*cmdargs, " ", len); + i++; + } + kvm_close(kd); } -#else /* Linux using /proc/pid/cmdline */ +#else /* Linux using /proc/pid/cmdline */ /* Check if /proc/pid/cmdline exists. It's not supported on all * operating systems. */ @@ -232,26 +232,24 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) path[totsize - 1] = '\0'; /* Contruct the process name without arguments. */ - if (cmdname) - { + if (cmdname) { *cmdname = strdup(path); } /* Construct the arguments for client process. */ - if (cmdargs) - { + if (cmdargs) { int cmdsize = strlen(path) + 1; int argsize = totsize - cmdsize; char *args = NULL; if (argsize > 0) args = malloc(argsize); - if (args) - { + if (args) { int i = 0; - for (i = 0; i < (argsize - 1); ++i) - { + + for (i = 0; i < (argsize - 1); ++i) { const char c = path[cmdsize + i]; + args[i] = (c == '\0') ? ' ' : c; } args[argsize - 1] = '\0'; @@ -266,7 +264,8 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) * * @param[in] client Recently connected client. */ -void ReserveClientIds(struct _Client *client) +void +ReserveClientIds(struct _Client *client) { #ifdef CLIENTIDS if (client == NullClient) @@ -279,7 +278,8 @@ void ReserveClientIds(struct _Client *client) client->clientIds->pid = DetermineClientPid(client); if (client->clientIds->pid != -1) - DetermineClientCmd(client->clientIds->pid, &client->clientIds->cmdname, &client->clientIds->cmdargs); + DetermineClientCmd(client->clientIds->pid, &client->clientIds->cmdname, + &client->clientIds->cmdargs); DebugF("client(%lx): Reserved pid(%d).\n", (unsigned long) client->clientAsMask, client->clientIds->pid); @@ -287,7 +287,7 @@ void ReserveClientIds(struct _Client *client) (unsigned long) client->clientAsMask, client->clientIds->cmdname ? client->clientIds->cmdname : "NULL", client->clientIds->cmdargs ? client->clientIds->cmdargs : "NULL"); -#endif /* CLIENTIDS */ +#endif /* CLIENTIDS */ } /** @@ -296,7 +296,8 @@ void ReserveClientIds(struct _Client *client) * * @param[in] client Recently disconnected client. */ -void ReleaseClientIds(struct _Client *client) +void +ReleaseClientIds(struct _Client *client) { #ifdef CLIENTIDS if (client == NullClient) @@ -312,11 +313,11 @@ void ReleaseClientIds(struct _Client *client) client->clientIds->cmdname ? client->clientIds->cmdname : "NULL", client->clientIds->cmdargs ? client->clientIds->cmdargs : "NULL"); - free((void *) client->clientIds->cmdname); /* const char * */ - free((void *) client->clientIds->cmdargs); /* const char * */ + free((void *) client->clientIds->cmdname); /* const char * */ + free((void *) client->clientIds->cmdargs); /* const char * */ free(client->clientIds); client->clientIds = NULL; -#endif /* CLIENTIDS */ +#endif /* CLIENTIDS */ } /** @@ -331,7 +332,8 @@ void ReleaseClientIds(struct _Client *client) * * @see DetermineClientPid */ -pid_t GetClientPid(struct _Client *client) +pid_t +GetClientPid(struct _Client *client) { if (client == NullClient) return -1; @@ -356,7 +358,8 @@ pid_t GetClientPid(struct _Client *client) * * @see DetermineClientCmd */ -const char *GetClientCmdName(struct _Client *client) +const char * +GetClientCmdName(struct _Client *client) { if (client == NullClient) return NULL; @@ -381,7 +384,8 @@ const char *GetClientCmdName(struct _Client *client) * * @see DetermineClientCmd */ -const char *GetClientCmdArgs(struct _Client *client) +const char * +GetClientCmdArgs(struct _Client *client) { if (client == NullClient) return NULL; |