Skip to content

Commit d48d285

Browse files
committed
Minor updates.
1 parent 94beb83 commit d48d285

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ ARFLAGS = rcs
1010
TARGET = libfortran-pcre2.a
1111
TEST = test_pcre2
1212

13-
.PHONY: all clean
13+
.PHONY: all clean test
1414

15-
all: $(TARGET) $(TEST)
15+
all: $(TARGET)
1616

1717
$(TARGET): src/pcre2.f90
1818
$(FC) $(FFLAGS) -c src/pcre2.f90
1919
$(AR) $(ARFLAGS) $(TARGET) pcre2.o
2020

21-
$(TEST): test/test_pcre2.f90
21+
test:
2222
$(FC) $(FFLAGS) $(LDFLAGS) -o $(TEST) test/test_pcre2.f90 $(TARGET) $(LDLIBS)
2323

2424
clean:

src/pcre2.f90

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,6 @@ module pcre2
317317

318318
private :: c_f_str_ptr
319319
private :: c_strlen
320-
private :: copy
321320
private :: pcre2_substring_copy_byname_
322321
private :: pcre2_substring_copy_bynumber_
323322
private :: pcre2_substring_get_byname_
@@ -560,16 +559,27 @@ function pcre2_substring_get_bynumber(match_data, number, buffer, buff_len) resu
560559
end function pcre2_substring_get_bynumber
561560

562561
subroutine c_f_str_ptr(c_str, f_str)
562+
!! Copies a C string, passed as a C pointer, to a Fortran string.
563563
type(c_ptr), intent(in) :: c_str
564564
character(len=:), allocatable, intent(out) :: f_str
565-
character(kind=c_char), pointer :: ptrs(:)
566-
integer(kind=i8) :: sz
567-
568-
if (.not. c_associated(c_str)) return
569-
sz = c_strlen(c_str)
570-
if (sz < 0) return
571-
call c_f_pointer(c_str, ptrs, [ sz ])
572-
allocate (character(len=sz) :: f_str)
573-
f_str = copy(ptrs)
565+
566+
character(kind=c_char), pointer :: ptrs(:)
567+
integer(kind=c_size_t) :: i, sz
568+
569+
copy_block: block
570+
if (.not. c_associated(c_str)) exit copy_block
571+
sz = c_strlen(c_str)
572+
if (sz < 0) exit copy_block
573+
call c_f_pointer(c_str, ptrs, [ sz ])
574+
allocate (character(len=sz) :: f_str)
575+
576+
do i = 1, sz
577+
f_str(i:i) = ptrs(i)
578+
end do
579+
580+
return
581+
end block copy_block
582+
583+
if (.not. allocated(f_str)) f_str = ''
574584
end subroutine c_f_str_ptr
575585
end module pcre2

0 commit comments

Comments
 (0)