ugkong@sunybcs.UUCP (02/14/87)
Here is a patch that I have created for gnu-emacs that is running on a
VMS 4.4 system using VAX C version 2.2. There seems to be a bug in C
run time routine that translates a Unix type file path to a VMS type file
path. It seems that the routine that does the translation of the path(s)
does not like the character "-" and cause gnu-emacs to bomb when file
names contain "-"'s in them. This only happens when gnu-emacs trys to
translate an entire file path.
eg) ./etc/DOC-18.38.2 will cause an error when emacs trys to
open the file.
The patch that is included is just a kludge that I have placed in our
version of emacs to force it to translate the directory specification
first and then append the file name that is to be opened. This is
just a temporary fix that I have implemented to get gnu-emacs to run
on our system, so that it will handle "-".
Bob Lay Kong
UCS Graphics Consultant / TeX Software Support
BITNET: acsgrlk@ubvms
acsgrlk@ubvm
CSNET: ugkong@buffalo
UUCP: ...{alegra,decvax,watmath}!sunybcs!ugkong
--------------------------cut here--------------------------------------
*** src/doc.c Tue Dec 9 11:42:45 1986
--- /u1/undergra/ugkong/doc.c Fri Feb 13 21:04:15 1987
***************
*** 48,52 ****
register int count;
extern char *index ();
!
if (XTYPE (Vexec_directory) != Lisp_String
|| XTYPE (Vdoc_file_name) != Lisp_String)
--- 48,55 ----
register int count;
extern char *index ();
! #ifdef VMS4_4
! char vms_file[256], work_buffer[256];
! char *last_slash;
! #endif /* VMS4_4 */
if (XTYPE (Vexec_directory) != Lisp_String
|| XTYPE (Vdoc_file_name) != Lisp_String)
***************
*** 70,75 ****
#endif /* not VMS4_4 */
#endif /* VMS */
! fd = open (name, O_RDONLY, 0);
if (fd < 0)
error ("Cannot open doc string file \"%s\"", name);
--- 73,87 ----
#endif /* not VMS4_4 */
#endif /* VMS */
+ #ifdef VMS4_4
+ vms_file[0] = work_buffer[0] = '\0';
+ last_slash = strrchr(name, '/');
+ strncat(vms_file, name, (last_slash-name)+1);
+ vms_file[(last_slash-name)+1] = '\0';
+ strcat(vms_file, ++last_slash);
+ strcpy (vms_file, sys_translate_unix(vms_file));
+ #endif /* VMS4_4 */
! fd = open (vms_file, O_RDONLY, 0);
!
if (fd < 0)
error ("Cannot open doc string file \"%s\"", name);
***************
*** 189,192 ****
--- 201,207 ----
name = (char *) alloca (XSTRING (filename)->size + 8);
strcpy (name, "../etc/");
+ #ifdef VMS4_4
+ strcpy (name, sys_translate_unix(name));
+ #endif /* VMS4_4 */
#else /* CANNOT_DUMP */
CHECK_STRING (Vexec_directory, 0);