From dafebc5bb70303f0b5baf0b087cf4d9a64b5c7f0 Mon Sep 17 00:00:00 2001 From: marha Date: Mon, 12 Sep 2011 11:27:51 +0200 Subject: Synchronised line endinge with release branch --- libXmu/src/CvtStdSel.c | 694 ++++++++++++++++++++++++------------------------- 1 file changed, 347 insertions(+), 347 deletions(-) (limited to 'libXmu/src/CvtStdSel.c') diff --git a/libXmu/src/CvtStdSel.c b/libXmu/src/CvtStdSel.c index a931aa90c..81d1a8474 100644 --- a/libXmu/src/CvtStdSel.c +++ b/libXmu/src/CvtStdSel.c @@ -1,347 +1,347 @@ -/* - -Copyright 1988, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ - -/* - * This file contains routines to handle common selection targets. - * - * Public entry points: - * - * XmuConvertStandardSelection() return a known selection - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#ifdef SYSVNET -#include -#define __TYPES__ /* prevent #include in Xlib.h */ -#include -#include -#endif /* SYSVNET */ - -#include -#include -#include -#ifdef XTHREADS -#include -#endif -#include - -#ifndef SYSVNET -#ifdef WIN32 -#include -#define XOS_USE_MTSAFE_NETDBAPI -#else -#ifndef Lynx -#include -#else -#include -#include -#endif -#define XOS_USE_XT_LOCKING -#endif -#define X_INCLUDE_NETDB_H -#include -#endif - -#include -#include -#include "Atoms.h" -#include "StdSel.h" -#include "SysUtil.h" -#include - -#ifndef OS_NAME -#ifndef X_OS_FILE -#ifdef SYSV /* keep separate until makedepend fixed */ -#define USE_UNAME -#endif -#ifdef SVR4 -#define USE_UNAME -#endif -#ifdef ultrix -#define USE_UNAME -#endif -#ifdef CSRG_BASED -#define USE_UNAME -#endif -#endif /*X_OS_FILE*/ -#ifdef USE_UNAME -#include -#endif -#endif - -/* - * Prototypes - */ -static char *get_os_name(void); -static Bool isApplicationShell(Widget); - -/* - * Implementation - */ -static char * -get_os_name(void) -{ -#ifdef OS_NAME - return XtNewString(OS_NAME); -#else -#if defined(X_OS_FILE) || defined(MOTD_FILE) - FILE *f = NULL; -#endif - -#ifdef USE_UNAME - struct utsname utss; - - if (uname (&utss) >= 0) { - char *os_name; - int len = strlen(utss.sysname) + 1; -#ifndef hpux /* because of hostname length crock */ - len += 2 + strlen(utss.release); -#endif - os_name = XtMalloc (len); - strcpy (os_name, utss.sysname); -#ifndef hpux - strcat (os_name, " "); - strcat (os_name, utss.release); -#endif - return os_name; - } -#endif - -#ifdef X_OS_FILE - f = fopen(X_OS_FILE, "r"); - if (!f) -#endif -#ifdef MOTD_FILE - f = fopen(MOTD_FILE, "r"); -#endif -#if defined(X_OS_FILE) || defined(MOTD_FILE) - if (f) { - char motd[512]; - motd[0] = '\0'; - (void) fgets(motd, 511, f); - fclose(f); - motd[511] = '\0'; - if (motd[0] != '\0') { - int len = strlen(motd); - if (motd[len - 1] == '\n') - motd[len - 1] = '\0'; - return XtNewString(motd); - } - } -#endif - -#ifdef sun - return XtNewString("SunOS"); -#else -# if !defined(SYSV) && (defined(CSRG_BASED) || defined(unix)) - return XtNewString("BSD"); -# else - return NULL; -# endif -#endif - -#endif /*OS_NAME*/ -} - -/* This is a trick/kludge. To make shared libraries happier (linking - * against Xmu but not linking against Xt, and apparently even work - * as we desire on SVR4, we need to avoid an explicit data reference - * to applicationShellWidgetClass. XtIsTopLevelShell is known - * (implementation dependent assumption!) to use a bit flag. So we - * go that far. Then, we test whether it is an applicationShellWidget - * class by looking for an explicit class name. Seems pretty safe. - */ -static Bool -isApplicationShell(Widget w) -{ - register WidgetClass c; - - if (!XtIsTopLevelShell(w)) - return False; - for (c = XtClass(w); c; c = c->core_class.superclass) { - if (!strcmp(c->core_class.class_name, "ApplicationShell")) - return True; - } - return False; -} - -Boolean -XmuConvertStandardSelection(Widget w, Time time, Atom *selection, Atom *target, - Atom *type, XPointer *value, - unsigned long *length, int *format) -{ - Display *d = XtDisplay(w); - if (*target == XA_TIMESTAMP(d)) { - *value = XtMalloc(4); - if (sizeof(long) == 4) - *(long*)*value = time; - else { - long temp = time; - (void) memmove((char*)*value, ((char*)&temp)+sizeof(long)-4, 4); - } - *type = XA_INTEGER; - *length = 1; - *format = 32; - return True; - } - if (*target == XA_HOSTNAME(d)) { - char hostname[1024]; - hostname[0] = '\0'; - *length = XmuGetHostname (hostname, sizeof hostname); - *value = XtNewString(hostname); - *type = XA_STRING; - *format = 8; - return True; - } -#if defined(TCPCONN) - if (*target == XA_IP_ADDRESS(d)) { - char hostname[1024]; -#ifdef XTHREADS_NEEDS_BYNAMEPARAMS - _Xgethostbynameparams hparams; -#endif - struct hostent *hostp; - - hostname[0] = '\0'; - (void) XmuGetHostname (hostname, sizeof hostname); - - if ((hostp = _XGethostbyname (hostname,hparams)) == NULL) - return False; - - if (hostp->h_addrtype != AF_INET) return False; - *length = hostp->h_length; - *value = XtMalloc(*length); - (void) memmove (*value, hostp->h_addr, *length); - *type = XA_NET_ADDRESS(d); - *format = 8; - return True; - } -#endif -#ifdef DNETCONN - if (*target == XA_DECNET_ADDRESS(d)) { - return False; /* XXX niy */ - } -#endif - if (*target == XA_USER(d)) { - char *name = (char*)getenv("USER"); - if (name == NULL) return False; - *value = XtNewString(name); - *type = XA_STRING; - *length = strlen(name); - *format = 8; - return True; - } - if (*target == XA_CLASS(d)) { - Widget parent = XtParent(w); - char *class; - int len; - while (parent != NULL && !isApplicationShell(w)) { - w = parent; - parent = XtParent(w); - } - if (isApplicationShell(w)) - class = ((ApplicationShellWidget) w)->application.class; - else - class = XtClass(w)->core_class.class_name; - *length = (len=strlen(w->core.name)) + strlen(class) + 2; - *value = XtMalloc(*length); - strcpy( (char*)*value, w->core.name ); - strcpy( (char*)*value+len+1, class ); - *type = XA_STRING; - *format = 8; - return True; - } - if (*target == XA_NAME(d)) { - Widget parent = XtParent(w); - - while (parent != NULL && !XtIsWMShell(w)) { - w = parent; - parent = XtParent(w); - } - if (!XtIsWMShell(w)) return False; - *value = XtNewString( ((WMShellWidget) w)->wm.title ); - *length = strlen(*value); - *type = XA_STRING; - *format = 8; - return True; - } - if (*target == XA_CLIENT_WINDOW(d)) { - Widget parent = XtParent(w); - while (parent != NULL) { - w = parent; - parent = XtParent(w); - } - *value = XtMalloc(sizeof(Window)); - *(Window*)*value = w->core.window; - *type = XA_WINDOW; - *length = 1; - *format = 32; - return True; - } - if (*target == XA_OWNER_OS(d)) { - *value = get_os_name(); - if (*value == NULL) return False; - *type = XA_STRING; - *length = strlen(*value); - *format = 8; - return True; - } - if (*target == XA_TARGETS(d)) { -#if defined(unix) && defined(DNETCONN) -# define NUM_TARGETS 9 -#else -# if defined(unix) || defined(DNETCONN) -# define NUM_TARGETS 8 -# else -# define NUM_TARGETS 7 -# endif -#endif - Atom* std_targets = (Atom*)XtMalloc(NUM_TARGETS*sizeof(Atom)); - int i = 0; - std_targets[i++] = XA_TIMESTAMP(d); - std_targets[i++] = XA_HOSTNAME(d); - std_targets[i++] = XA_IP_ADDRESS(d); - std_targets[i++] = XA_USER(d); - std_targets[i++] = XA_CLASS(d); - std_targets[i++] = XA_NAME(d); - std_targets[i++] = XA_CLIENT_WINDOW(d); -#ifdef unix - std_targets[i++] = XA_OWNER_OS(d); -#endif -#ifdef DNETCONN - std_targets[i++] = XA_DECNET_ADDRESS(d); -#endif - *value = (XPointer)std_targets; - *type = XA_ATOM; - *length = NUM_TARGETS; - *format = 32; - return True; - } - /* else */ - return False; -} +/* + +Copyright 1988, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +*/ + +/* + * This file contains routines to handle common selection targets. + * + * Public entry points: + * + * XmuConvertStandardSelection() return a known selection + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef SYSVNET +#include +#define __TYPES__ /* prevent #include in Xlib.h */ +#include +#include +#endif /* SYSVNET */ + +#include +#include +#include +#ifdef XTHREADS +#include +#endif +#include + +#ifndef SYSVNET +#ifdef WIN32 +#include +#define XOS_USE_MTSAFE_NETDBAPI +#else +#ifndef Lynx +#include +#else +#include +#include +#endif +#define XOS_USE_XT_LOCKING +#endif +#define X_INCLUDE_NETDB_H +#include +#endif + +#include +#include +#include "Atoms.h" +#include "StdSel.h" +#include "SysUtil.h" +#include + +#ifndef OS_NAME +#ifndef X_OS_FILE +#ifdef SYSV /* keep separate until makedepend fixed */ +#define USE_UNAME +#endif +#ifdef SVR4 +#define USE_UNAME +#endif +#ifdef ultrix +#define USE_UNAME +#endif +#ifdef CSRG_BASED +#define USE_UNAME +#endif +#endif /*X_OS_FILE*/ +#ifdef USE_UNAME +#include +#endif +#endif + +/* + * Prototypes + */ +static char *get_os_name(void); +static Bool isApplicationShell(Widget); + +/* + * Implementation + */ +static char * +get_os_name(void) +{ +#ifdef OS_NAME + return XtNewString(OS_NAME); +#else +#if defined(X_OS_FILE) || defined(MOTD_FILE) + FILE *f = NULL; +#endif + +#ifdef USE_UNAME + struct utsname utss; + + if (uname (&utss) >= 0) { + char *os_name; + int len = strlen(utss.sysname) + 1; +#ifndef hpux /* because of hostname length crock */ + len += 2 + strlen(utss.release); +#endif + os_name = XtMalloc (len); + strcpy (os_name, utss.sysname); +#ifndef hpux + strcat (os_name, " "); + strcat (os_name, utss.release); +#endif + return os_name; + } +#endif + +#ifdef X_OS_FILE + f = fopen(X_OS_FILE, "r"); + if (!f) +#endif +#ifdef MOTD_FILE + f = fopen(MOTD_FILE, "r"); +#endif +#if defined(X_OS_FILE) || defined(MOTD_FILE) + if (f) { + char motd[512]; + motd[0] = '\0'; + (void) fgets(motd, 511, f); + fclose(f); + motd[511] = '\0'; + if (motd[0] != '\0') { + int len = strlen(motd); + if (motd[len - 1] == '\n') + motd[len - 1] = '\0'; + return XtNewString(motd); + } + } +#endif + +#ifdef sun + return XtNewString("SunOS"); +#else +# if !defined(SYSV) && (defined(CSRG_BASED) || defined(unix)) + return XtNewString("BSD"); +# else + return NULL; +# endif +#endif + +#endif /*OS_NAME*/ +} + +/* This is a trick/kludge. To make shared libraries happier (linking + * against Xmu but not linking against Xt, and apparently even work + * as we desire on SVR4, we need to avoid an explicit data reference + * to applicationShellWidgetClass. XtIsTopLevelShell is known + * (implementation dependent assumption!) to use a bit flag. So we + * go that far. Then, we test whether it is an applicationShellWidget + * class by looking for an explicit class name. Seems pretty safe. + */ +static Bool +isApplicationShell(Widget w) +{ + register WidgetClass c; + + if (!XtIsTopLevelShell(w)) + return False; + for (c = XtClass(w); c; c = c->core_class.superclass) { + if (!strcmp(c->core_class.class_name, "ApplicationShell")) + return True; + } + return False; +} + +Boolean +XmuConvertStandardSelection(Widget w, Time time, Atom *selection, Atom *target, + Atom *type, XPointer *value, + unsigned long *length, int *format) +{ + Display *d = XtDisplay(w); + if (*target == XA_TIMESTAMP(d)) { + *value = XtMalloc(4); + if (sizeof(long) == 4) + *(long*)*value = time; + else { + long temp = time; + (void) memmove((char*)*value, ((char*)&temp)+sizeof(long)-4, 4); + } + *type = XA_INTEGER; + *length = 1; + *format = 32; + return True; + } + if (*target == XA_HOSTNAME(d)) { + char hostname[1024]; + hostname[0] = '\0'; + *length = XmuGetHostname (hostname, sizeof hostname); + *value = XtNewString(hostname); + *type = XA_STRING; + *format = 8; + return True; + } +#if defined(TCPCONN) + if (*target == XA_IP_ADDRESS(d)) { + char hostname[1024]; +#ifdef XTHREADS_NEEDS_BYNAMEPARAMS + _Xgethostbynameparams hparams; +#endif + struct hostent *hostp; + + hostname[0] = '\0'; + (void) XmuGetHostname (hostname, sizeof hostname); + + if ((hostp = _XGethostbyname (hostname,hparams)) == NULL) + return False; + + if (hostp->h_addrtype != AF_INET) return False; + *length = hostp->h_length; + *value = XtMalloc(*length); + (void) memmove (*value, hostp->h_addr, *length); + *type = XA_NET_ADDRESS(d); + *format = 8; + return True; + } +#endif +#ifdef DNETCONN + if (*target == XA_DECNET_ADDRESS(d)) { + return False; /* XXX niy */ + } +#endif + if (*target == XA_USER(d)) { + char *name = (char*)getenv("USER"); + if (name == NULL) return False; + *value = XtNewString(name); + *type = XA_STRING; + *length = strlen(name); + *format = 8; + return True; + } + if (*target == XA_CLASS(d)) { + Widget parent = XtParent(w); + char *class; + int len; + while (parent != NULL && !isApplicationShell(w)) { + w = parent; + parent = XtParent(w); + } + if (isApplicationShell(w)) + class = ((ApplicationShellWidget) w)->application.class; + else + class = XtClass(w)->core_class.class_name; + *length = (len=strlen(w->core.name)) + strlen(class) + 2; + *value = XtMalloc(*length); + strcpy( (char*)*value, w->core.name ); + strcpy( (char*)*value+len+1, class ); + *type = XA_STRING; + *format = 8; + return True; + } + if (*target == XA_NAME(d)) { + Widget parent = XtParent(w); + + while (parent != NULL && !XtIsWMShell(w)) { + w = parent; + parent = XtParent(w); + } + if (!XtIsWMShell(w)) return False; + *value = XtNewString( ((WMShellWidget) w)->wm.title ); + *length = strlen(*value); + *type = XA_STRING; + *format = 8; + return True; + } + if (*target == XA_CLIENT_WINDOW(d)) { + Widget parent = XtParent(w); + while (parent != NULL) { + w = parent; + parent = XtParent(w); + } + *value = XtMalloc(sizeof(Window)); + *(Window*)*value = w->core.window; + *type = XA_WINDOW; + *length = 1; + *format = 32; + return True; + } + if (*target == XA_OWNER_OS(d)) { + *value = get_os_name(); + if (*value == NULL) return False; + *type = XA_STRING; + *length = strlen(*value); + *format = 8; + return True; + } + if (*target == XA_TARGETS(d)) { +#if defined(unix) && defined(DNETCONN) +# define NUM_TARGETS 9 +#else +# if defined(unix) || defined(DNETCONN) +# define NUM_TARGETS 8 +# else +# define NUM_TARGETS 7 +# endif +#endif + Atom* std_targets = (Atom*)XtMalloc(NUM_TARGETS*sizeof(Atom)); + int i = 0; + std_targets[i++] = XA_TIMESTAMP(d); + std_targets[i++] = XA_HOSTNAME(d); + std_targets[i++] = XA_IP_ADDRESS(d); + std_targets[i++] = XA_USER(d); + std_targets[i++] = XA_CLASS(d); + std_targets[i++] = XA_NAME(d); + std_targets[i++] = XA_CLIENT_WINDOW(d); +#ifdef unix + std_targets[i++] = XA_OWNER_OS(d); +#endif +#ifdef DNETCONN + std_targets[i++] = XA_DECNET_ADDRESS(d); +#endif + *value = (XPointer)std_targets; + *type = XA_ATOM; + *length = NUM_TARGETS; + *format = 32; + return True; + } + /* else */ + return False; +} -- cgit v1.2.3