Skip to content

Commit 45761fe

Browse files
committed
Corrected WSL behaviour for change dir command
1 parent d4d90bd commit 45761fe

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

lib_f90/support_mod.f90

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -272,40 +272,42 @@ SUBROUTINE do_chdir (dir, ld, echo)
272272
INTEGER , INTENT(INOUT) :: ld
273273
LOGICAL , INTENT(IN) :: echo
274274
!
275-
CHARACTER(LEN=PREC_STRING) :: cwd
275+
CHARACTER(LEN=PREC_STRING) :: cwd ! to wotk with locally
276+
CHARACTER(LEN=PREC_STRING) :: cwd_echo ! For display only
276277
CHARACTER(LEN=PREC_STRING), DIMENSION(MAXW) :: cpara
277278
CHARACTER(LEN=PREC_STRING) :: string
278279
CHARACTER(LEN= 1) :: drive
279280
CHARACTER(LEN= 6) :: mntdrive
280281
INTEGER :: i
282+
INTEGER :: lld
281283
INTEGER, DIMENSION(MAXW) :: lpara
282284
INTEGER :: ianz
283285
INTEGER :: dummy
284286
REAL(KIND=PREC_DP), DIMENSION(MAXW) :: werte
285287
!
286288
!
287-
IF (dir.eq.' ') then
289+
IF (dir.eq.' ') THEN
288290
CALL sys_holecwd(cwd, dummy)
289-
ld = LEN_TRIM(cwd)
290-
dir = cwd
291+
ld = LEN_TRIM(cwd)
292+
dir = cwd ! Update user directory
293+
cwd_echo = cwd ! Make copy for display
291294
IF(operating==OS_LINUX_WSL) THEN
292-
DO i=1, ld
295+
lld = LEN_TRIM(cwd_echo)
296+
DO i=1, lld
293297
IF(cwd(i:i)=='/') cwd(i:i)='\'
294298
ENDDO
295-
IF(cwd(ld:ld) /= '\') THEN
296-
cwd(ld+1:ld+1) = '\'
297-
ld = ld + 1
299+
IF(cwd(lld:lld) /= '\') THEN
300+
cwd(lld+1:lld+1) = '\'
301+
lld = lld + 1
298302
ENDIF
299303
IF(cwd(1:5) == '\mnt\') THEN
300304
drive = cwd(6:6)
301305
CALL do_cap(drive)
302-
cwd = drive // ':' // cwd(7:ld)
303-
ld = LEN_TRIM(cwd)
306+
cwd_echo = drive // ':' // cwd(7:lld)
304307
ENDIF
305308
ENDIF
306309
IF (echo) then
307-
ld = LEN_TRIM(cwd)
308-
WRITE ( *, 1000) cwd (1:ld)
310+
WRITE ( *, 1000) cwd_echo(1:LEN_TRIM(cwd_echo))
309311
ENDIF
310312
ELSE
311313
ld = -ld
@@ -328,39 +330,43 @@ SUBROUTINE do_chdir (dir, ld, echo)
328330
IF(cpara(1)(i:i)=='\') cpara(1)(i:i) = '/'
329331
ENDDO
330332
ENDIF
331-
cwd = cpara (1) (1:lpara (1) )
332-
ld = lpara (1)
333-
CALL sys_chdir (cwd (1:ld), ier_num)
333+
cwd = cpara(1)(1:lpara (1) )
334+
ld = lpara(1)
335+
CALL sys_chdir(cwd(1:ld), ier_num)
334336
IF (ier_num.eq.0) then
335337
ier_typ = ER_NONE
336338
CALL sys_holecwd(cwd, dummy)
337-
ld = len_str (cwd)
339+
ld = LEN_TRIM(cwd)
338340
IF(cwd(ld:ld) /= '/' ) THEN
339341
cwd = cwd(1:ld) // '/'
340342
ld = ld + 1
341343
ENDIF
342-
current_dir = cwd(1:LEN(current_dir))
343-
current_dir_l = MIN(ld, LEN(current_dir))
344-
dir = current_dir
345-
ld = current_dir_l
344+
cwd_echo = cwd
346345
IF(operating==OS_LINUX_WSL) THEN
347-
DO i=1, ld
348-
IF(cwd(i:i)=='/') cwd(i:i)='\'
346+
lld = LEN_TRIM(cwd_echo)
347+
DO i=1, lld
348+
IF(cwd_echo(i:i)=='/') cwd_echo(i:i)='\'
349349
ENDDO
350-
IF(cwd(1:5) == '\mnt\') THEN
351-
drive = cwd(6:6)
350+
IF(cwd_echo(1:5) == '\mnt\') THEN
351+
drive = cwd_echo(6:6)
352352
CALL do_cap(drive)
353-
cwd = drive // ':' // cwd(7:ld)
354-
ld = LEN_TRIM(cwd)
353+
cwd_echo = drive // ':' // cwd_echo(7:lld)
355354
ENDIF
355+
ELSE
356+
cwd_echo = cwd
356357
ENDIF
357-
IF(echo) WRITE (output_io, 1000) cwd (1:ld)
358+
IF(echo) WRITE (output_io, 1000) cwd_echo(1:LEN_TRIM(cwd_echo))
358359
ELSE
359360
WRITE ( *, 2000) ier_num
360361
ier_num = - 5
361362
ier_typ = ER_COMM
362363
ENDIF
363364
ENDIF
365+
!
366+
current_dir = cwd(1:LEN(current_dir)) ! Update the global variable
367+
current_dir_l = MIN(ld, LEN(current_dir))
368+
dir = cwd
369+
ld = LEN_TRIM(dir)
364370
!
365371
1000 FORMAT (' ------ > Working directory : ',a)
366372
2000 FORMAT (' ****SYST**** Unable to change directory - Error :', &

0 commit comments

Comments
 (0)