diff --git a/utils/utils.c b/utils/utils.c
index 296c1f1962d5d8a45e5ef716270da8403bc8d25e..38ec3fad629eb965e7e6423b9acd3705506e7c4b 100644
--- a/utils/utils.c
+++ b/utils/utils.c
@@ -228,30 +228,17 @@ int resolve_link(const char *prefix, char *path)
 
         if( rl[0] == '/' )
         {
-            const int pl = strlen( prefix );
-
-            if( pl + rv > PATH_MAX )
+            if( build_filename( path, PATH_MAX, prefix, rl, NULL ) >= PATH_MAX )
             {
-                rv = -1;
                 goto out;
             }
-
-            safe_strncpy( path, prefix, PATH_MAX );
-            safe_strncpy( path + pl, rl, PATH_MAX - pl );
         }
         else
         {
-            const int pl = strlen( dir );
-
-            if( pl + rv + 1 > PATH_MAX )
+            if( build_filename( path, PATH_MAX, dir, rl, NULL ) >= PATH_MAX )
             {
-                rv = -1;
                 goto out;
             }
-
-            safe_strncpy( path, dir, PATH_MAX );
-            path[ pl ] = '/';
-            safe_strncpy( path + pl + 1, rl, PATH_MAX - pl - 1 );
         }
     }