98N/A# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
98N/A# Use subject to license terms.
98N/A# Permission is hereby granted, free of charge, to any person obtaining a
98N/A# copy of this software and associated documentation files (the
98N/A# "Software"), to deal in the Software without restriction, including
98N/A# without limitation the rights to use, copy, modify, merge, publish,
98N/A# distribute,
and/or sell copies of the Software, and to permit persons
98N/A# to whom the Software is furnished to do so, provided that the above
98N/A# copyright notice(s) and this permission notice appear in all copies of
98N/A# the Software and that both the above copyright notice(s) and this
98N/A# permission notice appear in supporting documentation.
98N/A# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
98N/A# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
98N/A# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
98N/A# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
98N/A# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
98N/A# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
98N/A# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
98N/A# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
98N/A# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
98N/A# Except as contained in this notice, the name of a copyright holder
98N/A# shall not be used in advertising or otherwise to promote the sale, use
98N/A# or other dealings in this Software without prior written authorization
98N/A# of the copyright holder.
98N/A@@ -453,18 +453,37 @@ FindModule(const char *module, const cha
98N/A dirpath = (char *)dirname;
98N/A- if (strlen(dirpath) > PATH_MAX)
98N/A+ dirlen = strlen(dirpath);
98N/A+ if (dirlen > PATH_MAX)
98N/A+ xf86MsgVerb(X_INFO, 4, "Loading module %s from path \"%s\"\n", module, dirname);
98N/A+#if defined(SUNSOFT) && (defined(__amd64) || defined(__amd64__))
98N/A+ const char *amd64subdir = "amd64/";
98N/A+ if (strcmp(dirpath + (dirlen - 6), amd64subdir) == 0) {
98N/A+ dirpath = strdup(dirname);
98N/A+ dirpath[dirlen - 6] = '\0';
98N/A subdirs = InitSubdirs(subdirlist);
98N/A for (s = subdirs; *s; s++) {
98N/A+#if defined(SUNSOFT) && (defined(__amd64) || defined(__amd64__))
98N/A+ if ((dirlen = strlen(dirpath) + strlen(*s) + sizeof(amd64subdir)) > PATH_MAX)
98N/A if ((dirlen = strlen(dirpath) + strlen(*s)) > PATH_MAX)
98N/A strcpy(buf, dirpath);
98N/A+#if defined(SUNSOFT) && (defined(__amd64) || defined(__amd64__))
98N/A+ strcat(buf, amd64subdir);
98N/A if ((name = FindModuleInSubdir(buf, module)))
98N/A@@ -903,7 +922,7 @@ doLoadModule(const char *module, const c
98N/A * check the elements in the path
98N/A if (PathIsAbsolute(module))
98N/A+ found = xstrdup(module);
98N/A path_elem = pathlist;
98N/A while (!found && *path_elem != NULL) {
98N/A found = FindModule(m, *path_elem, subdirlist, patterns);