Index: openssl/crypto/LPdir_vms.c |
=================================================================== |
--- openssl/crypto/LPdir_vms.c (revision 105093) |
+++ openssl/crypto/LPdir_vms.c (working copy) |
@@ -40,22 +40,18 @@ |
#ifndef LPDIR_H |
#include "LPdir.h" |
#endif |
+#include "vms_rms.h" |
-/* Because some compiler options hide this macor */ |
+/* Some compiler options hide EVMSERR. */ |
#ifndef EVMSERR |
-#define EVMSERR 65535 /* error for non-translatable VMS errors */ |
+# define EVMSERR 65535 /* error for non-translatable VMS errors */ |
#endif |
struct LP_dir_context_st |
{ |
unsigned long VMS_context; |
-#ifdef NAML$C_MAXRSS |
- char filespec[NAML$C_MAXRSS+1]; |
- char result[NAML$C_MAXRSS+1]; |
-#else |
- char filespec[256]; |
- char result[256]; |
-#endif |
+ char filespec[ NAMX_MAXRSS+ 1]; |
+ char result[ NAMX_MAXRSS+ 1]; |
struct dsc$descriptor_d filespec_dsc; |
struct dsc$descriptor_d result_dsc; |
}; |
@@ -66,6 +62,16 @@ |
char *p, *r; |
size_t l; |
unsigned long flags = 0; |
+ |
+/* Arrange 32-bit pointer to (copied) string storage, if needed. */ |
+#if __INITIAL_POINTER_SIZE == 64 |
+# pragma pointer_size save |
+# pragma pointer_size 32 |
+ char *ctx_filespec_32p; |
+# pragma pointer_size restore |
+ char ctx_filespec_32[ NAMX_MAXRSS+ 1]; |
+#endif /* __INITIAL_POINTER_SIZE == 64 */ |
+ |
#ifdef NAML$C_MAXRSS |
flags |= LIB$M_FIL_LONG_NAMES; |
#endif |
@@ -93,13 +99,7 @@ |
filespeclen += 4; /* "*.*;" */ |
- if (filespeclen > |
-#ifdef NAML$C_MAXRSS |
- NAML$C_MAXRSS |
-#else |
- 255 |
-#endif |
- ) |
+ if (filespeclen > NAMX_MAXRSS) |
{ |
errno = ENAMETOOLONG; |
return 0; |
@@ -115,14 +115,21 @@ |
strcpy((*ctx)->filespec,directory); |
strcat((*ctx)->filespec,"*.*;"); |
+ |
+/* Arrange 32-bit pointer to (copied) string storage, if needed. */ |
+#if __INITIAL_POINTER_SIZE == 64 |
+# define CTX_FILESPEC ctx_filespec_32p |
+ /* Copy the file name to storage with a 32-bit pointer. */ |
+ ctx_filespec_32p = ctx_filespec_32; |
+ strcpy( ctx_filespec_32p, (*ctx)->filespec); |
+#else /* __INITIAL_POINTER_SIZE == 64 */ |
+# define CTX_FILESPEC (*ctx)->filespec |
+#endif /* __INITIAL_POINTER_SIZE == 64 [else] */ |
+ |
(*ctx)->filespec_dsc.dsc$w_length = filespeclen; |
(*ctx)->filespec_dsc.dsc$b_dtype = DSC$K_DTYPE_T; |
(*ctx)->filespec_dsc.dsc$b_class = DSC$K_CLASS_S; |
- (*ctx)->filespec_dsc.dsc$a_pointer = (*ctx)->filespec; |
- (*ctx)->result_dsc.dsc$w_length = 0; |
- (*ctx)->result_dsc.dsc$b_dtype = DSC$K_DTYPE_T; |
- (*ctx)->result_dsc.dsc$b_class = DSC$K_CLASS_D; |
- (*ctx)->result_dsc.dsc$a_pointer = 0; |
+ (*ctx)->filespec_dsc.dsc$a_pointer = CTX_FILESPEC; |
} |
(*ctx)->result_dsc.dsc$w_length = 0; |