Commit 3cd622cf authored by Ulrich Sibiller's avatar Ulrich Sibiller Committed by Mike Gabriel

Display.c: drop icon file support

The normal case was to use the builtin icons. There were two cases where the icon file was read from disk: 1) /usr/NX/share/images/nxagent.xpm was existing which normally is not there 2) case 2 was not true and nxagent.xpm was existing somewhere in the PATH (!) (replace nxagent.xpm by x2goagent.xpm if in x2gp mode) Scanning the path from the PATH variable for xpm files is kind of unexpected and dangerous, too (think of automounter triggers or invalid xpm files). Also remove the xpm files from the distribution.
parent 475961e6
......@@ -3,6 +3,5 @@ usr/bin/nxagent
usr/lib/*/nx/X11/
usr/share/man/man1/nxagent.1*
usr/share/nx/VERSION.nxagent
usr/share/pixmaps/nxagent.xpm
# FIXME: compatibility symlink, drop for 3.6.0 release
usr/lib/*/nx/bin/nxagent
......@@ -1797,89 +1797,9 @@ FIXME: Is this needed?
nxagentDisplay = NULL;
}
static FILE *nxagentLookForIconFile(char *iconName, const char *permission,
char *return_path, int return_path_size)
{
char *path;
char singlePath[PATH_MAX];
FILE *fptr = NULL;
#ifdef WIN32
const char separator = ';';
const char *slash = "\\";
#else
const char separator = ':';
const char *slash = "/";
#endif
if ((path = getenv("PATH")) == NULL)
{
return NULL;
}
for (char *end = path; end != NULL && fptr == NULL; )
{
end = strchr(path, separator);
/* separator found */
if (end != NULL)
{
if ((end - path) > sizeof(singlePath) - 1)
{
fprintf(stderr, "Warning: PATH component too long - ignoring it.\n");
path = end + 1;
continue;
}
snprintf(singlePath, (unsigned long)(end - path + 1), "%s", path);
path = end + 1;
}
else
{
if (strlen(path) > sizeof(singlePath) - 1)
{
fprintf(stderr, "Warning: PATH component too long - ignoring it.\n");
return NULL;
}
snprintf(singlePath, sizeof(singlePath), "%s", path);
}
/* cut off trailing slashes, if any */
while (singlePath[strlen(singlePath) - 1] == slash[0])
{
singlePath[strlen(singlePath) - 1] = '\0';
}
/* append slash and icon name */
if (strlen(singlePath) + strlen(iconName) + 1 < sizeof(singlePath))
{
snprintf(singlePath + strlen(singlePath), sizeof(singlePath), "%s%s", slash, iconName);
if ((fptr = fopen(singlePath, permission)) != NULL)
{
snprintf(return_path, return_path_size, "%s", singlePath);
}
}
else
{
fprintf(stderr, "Warning: Icon path too long.\n");
}
}
return fptr;
}
Bool nxagentMakeIcon(Display *display, Pixmap *nxIcon, Pixmap *nxMask)
{
char default_path [PATH_MAX];
char icon_path [PATH_MAX];
FILE *icon_fp;
int status;
Bool success = False;
XlibPixmap IconPixmap;
XlibPixmap IconShape;
char* agent_icon_name;
char** agentIconData;
/*
......@@ -1887,84 +1807,36 @@ Bool nxagentMakeIcon(Display *display, Pixmap *nxIcon, Pixmap *nxMask)
*/
if(nxagentX2go)
{
agent_icon_name = X2GOAGENT_ICON_NAME;
agentIconData = x2goagentIconData;
}
else
{
agent_icon_name = NXAGENT_ICON_NAME;
agentIconData = nxagentIconData;
}
/* FIXME: use a compile time define here, /usr/NX is a nomachine path */
snprintf(default_path, sizeof(default_path), "/usr/NX/share/images/%s", agent_icon_name);
if ((icon_fp = fopen(default_path, "r")) == NULL)
{
icon_fp = nxagentLookForIconFile(agent_icon_name, "r", icon_path, sizeof(icon_path));
if (icon_fp != NULL)
{
fclose (icon_fp);
success = True;
}
}
else
{
fclose (icon_fp);
success = True;
snprintf(icon_path, sizeof(icon_path), "%s", default_path);
}
if (success)
{
status = XpmReadFileToPixmap(display,
XlibPixmap IconPixmap;
XlibPixmap IconShape;
if (XpmSuccess == XpmCreatePixmapFromData(display,
DefaultRootWindow(display),
icon_path,
agentIconData,
&IconPixmap,
&IconShape,
NULL);
if (status != XpmSuccess)
NULL))
{
#ifdef TEST
fprintf(stderr, "nxagentMakeIcon: Xpm operation failed with error '%s'.\n",
XpmGetErrorString(status));
#endif
*nxIcon = IconPixmap;
*nxMask = IconShape;
success = False;
}
return True;
}
if (!success)
{
status = XpmCreatePixmapFromData(display,
DefaultRootWindow(display),
agentIconData,
&IconPixmap,
&IconShape,
NULL);
if (status != XpmSuccess)
else
{
#ifdef TEST
fprintf(stderr, "nxagentMakeIcon: Xpm operation failed with error '%s'.\n",
fprintf(stderr, "%s: Xpm operation failed with error '%s'.\n", __func__,
XpmGetErrorString(status));
#endif
success = False;
}
else
{
success = True;
}
return False;
}
*nxIcon = IconPixmap;
*nxMask = IconShape;
return success;
}
Bool nxagentXServerGeometryChanged(void)
......
......@@ -238,21 +238,13 @@ typedef struct {
_XFUNCPROTOBEGIN
/* Keep for hw/nxagent/Holder.c */
/* Keep for hw/nxagent/Display.c */
FUNC(XpmCreatePixmapFromData, int, (Display *display,
Drawable d,
char **data,
Pixmap *pixmap_return,
Pixmap *shapemask_return,
XpmAttributes *attributes));
/* Keep for hw/nxagent/Display.c */
FUNC(XpmReadFileToPixmap, int, (Display *display,
Drawable d,
const char *filename,
Pixmap *pixmap_return,
Pixmap *shapemask_return,
XpmAttributes *attributes));
_XFUNCPROTOEND
#endif /* XPM_NUMBERS */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment