- res = XMALLOC (char, strlen (cp) + strlen (skeleton_name) + 2);
- sprintf (res, "%s%c%s", cp, '/', skeleton_name);
+ /* Skeleton file name without path */
+ const char *skel_name = strrchr (skeleton_name, '/');
+ if (!skel_name)
+ skel_name = strrchr (skeleton_name, '\\');
+ if (!skel_name)
+ skel_name = skeleton_name;
+ else
+ ++skel_name;
+
+ /* File doesn't exist in current directory; try in INIT directory. */
+ const char *cp = getenv ("INIT");
+ if (cp)
+ {
+ res = XMALLOC (char, strlen (cp) + strlen (skel_name) + 2);
+ sprintf (res, "%s%c%s", cp, '\\', skel_name);
+ }
+ else if (access (skel_name, 4) == 0) /* Look in current dir. */
+ res = skel_name;
+ else
+ {
+ /* Look in program locations dir. */
+ extern char *program_name;
+ cp = strrchr(program_name, '\\');
+ if (!cp)
+ return skeleton_name;
+ else
+ ++cp;
+ res = XMALLOC (char, cp - program_name + strlen (skel_name) + 1);
+ strncpy (res, program_name, cp - program_name);
+ strcpy (res + (cp - program_name), skel_name);
+ }