This patch changes gcc/cobol/cdf-copy.cc to use the new ldirname from
libibertay rather than the host's dirname.  This removes an include
for libgen.h.

Regtested in x86_64-linux-gnu by running make check-cobol.

gcc/cobol/ChangeLog

        * cdf-copy.cc (copybook_elem_t::open_file): Use ldirname rather
        than dirname.
---
 gcc/cobol/cdf-copy.cc | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/gcc/cobol/cdf-copy.cc b/gcc/cobol/cdf-copy.cc
index dfa3f57315d..179dbacea93 100644
--- a/gcc/cobol/cdf-copy.cc
+++ b/gcc/cobol/cdf-copy.cc
@@ -40,7 +40,6 @@
 #include "copybook.h"
 
 #include <glob.h>
-#include <libgen.h>
 
 #define COUNT_OF(X) (sizeof(X) / sizeof(X[0]))
 
@@ -268,24 +267,33 @@ int
 copybook_elem_t::open_file( const char directory[], bool literally ) {
   int erc;
   char  *pattern, *copier = xstrdup(cobol_filename());
-  if( ! directory ) {
-    directory = dirname(copier);
-    if( 0 == strcmp(".", directory) ) directory = NULL;
+  char *dname = NULL;
+
+  if ( directory ) {
+    dname = xstrdup(directory);
+  } else {
+    dname = ldirname(copier);
+    gcc_assert (dname != NULL); /* out of memory  */
+    if( '\0' == dname[0] ) {
+      free (dname);
+      dname = NULL;
+    }
   }
 
   char *path = NULL;
 
-  if( directory || library.name ) {
-    if( directory && library.name ) {
-      path = xasprintf( "%s/%s/%s", directory, library.name, source.name );
+  if( dname || library.name ) {
+    if( dname && library.name ) {
+      path = xasprintf( "%s/%s/%s", dname, library.name, source.name );
     } else {
-      const char *dir = directory? directory : library.name;
+      const char *dir = dname? dname : library.name;
       path = xasprintf( "%s/%s", dir, source.name );
     }
   } else {
     path = xasprintf( "%s", source.name );
   }
 
+  free(dname);
   gcc_assert(path);
 
   if( literally ) {
-- 
2.30.2

Reply via email to