@@ -222,57 +222,6 @@ Perl_PerlLIO_dup2_cloexec(pTHX_ int oldfd, int newfd)
222222#endif
223223}
224224
225- #if defined(OEMVS )
226- #if (__CHARSET_LIB == 1 )
227- # include <stdio.h>
228- # include <stdlib.h>
229-
230- static int setccsid (int fd , int ccsid )
231- {
232- attrib_t attr ;
233- int rc ;
234-
235- memset (& attr , 0 , sizeof (attr ));
236- attr .att_filetagchg = 1 ;
237- attr .att_filetag .ft_ccsid = ccsid ;
238- attr .att_filetag .ft_txtflag = 1 ;
239-
240- rc = __fchattr (fd , & attr , sizeof (attr ));
241- return rc ;
242- }
243-
244- static void updateccsid (int fd , const char * path , int oflag , int perm )
245- {
246- int rc ;
247- if (oflag & O_CREAT ) {
248- rc = setccsid (fd , 819 );
249- }
250- }
251-
252- int asciiopen (const char * path , int oflag )
253- {
254- int rc ;
255- int fd = open (path , oflag );
256- if (fd == -1 ) {
257- return fd ;
258- }
259- updateccsid (fd , path , oflag , -1 );
260- return fd ;
261- }
262-
263- int asciiopen3 (const char * path , int oflag , int perm )
264- {
265- int rc ;
266- int fd = open (path , oflag , perm );
267- if (fd == -1 ) {
268- return fd ;
269- }
270- updateccsid (fd , path , oflag , perm );
271- return fd ;
272- }
273- #endif
274- #endif
275-
276225int
277226Perl_PerlLIO_open_cloexec (pTHX_ const char * file , int flag )
278227{
@@ -302,9 +251,6 @@ Perl_PerlLIO_open3_cloexec(pTHX_ const char *file, int flag, int perm)
302251}
303252
304253#if defined(OEMVS )
305- #if (__CHARSET_LIB == 1 )
306- #define TEMP_CCSID 819
307- #endif
308254static int Internal_Perl_my_mkstemp_cloexec (char * templte )
309255{
310256 PERL_ARGS_ASSERT_MY_MKSTEMP_CLOEXEC ;
321267Perl_my_mkstemp_cloexec (char * templte )
322268{
323269 int tempfd = Internal_Perl_my_mkstemp_cloexec (templte );
324- # if defined(TEMP_CCSID )
325- setccsid (tempfd , TEMP_CCSID );
326- # endif
327270 return tempfd ;
328271}
329272
@@ -1471,6 +1414,10 @@ Perl_nextargv(pTHX_ GV *gv, bool nomagicopen)
14711414#endif
14721415 PL_filemode = statbuf .st_mode ;
14731416 fileuid = statbuf .st_uid ;
1417+ #ifdef __MVS__
1418+ int txtflag = statbuf .st_tag .ft_txtflag ;
1419+ int ccsid = statbuf .st_tag .ft_ccsid ;
1420+ #endif
14741421 filegid = statbuf .st_gid ;
14751422 if (!S_ISREG (PL_filemode )) {
14761423 ck_warner_d (packWARN (WARN_INPLACE ),
@@ -1548,6 +1495,9 @@ Perl_nextargv(pTHX_ GV *gv, bool nomagicopen)
15481495 PL_lastfd = PerlIO_fileno (IoIFP (GvIOp (PL_argvoutgv )));
15491496 if (PL_lastfd >= 0 ) {
15501497 (void )PerlLIO_fstat (PL_lastfd ,& statbuf );
1498+ #ifdef __MVS__
1499+ __setfdccsid (PL_lastfd , (txtflag << 16 ) | ccsid );
1500+ #endif
15511501#ifdef HAS_FCHMOD
15521502 (void )fchmod (PL_lastfd ,PL_filemode );
15531503#else
@@ -2558,6 +2508,11 @@ Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
25582508 }
25592509 doshell :
25602510 PERL_FPU_PRE_EXEC
2511+ #if defined(OEMVS )
2512+ #if (__CHARSET_LIB == 1 )
2513+ unsetenv ("_TAG_REDIR_ERR" );
2514+ #endif
2515+ #endif
25612516 PerlProc_execl (PL_sh_path , "sh" , "-c" , cmd , (char * )NULL );
25622517 PERL_FPU_POST_EXEC
25632518 S_exec_failed (aTHX_ PL_sh_path , fd , do_report );
0 commit comments