return true;
 }
 
+static int pathname_concat(char *buf, size_t buf_sz, const char *path, const char *name)
+{
+       int len;
+
+       len = snprintf(buf, buf_sz, "%s/%s", path, name);
+       if (len < 0)
+               return -EINVAL;
+       if (len >= buf_sz)
+               return -ENAMETOOLONG;
+
+       return 0;
+}
+
 static int build_map_pin_path(struct bpf_map *map, const char *path)
 {
        char buf[PATH_MAX];
-       int len;
+       int err;
 
        if (!path)
                path = "/sys/fs/bpf";
 
-       len = snprintf(buf, PATH_MAX, "%s/%s", path, bpf_map__name(map));
-       if (len < 0)
-               return -EINVAL;
-       else if (len >= PATH_MAX)
-               return -ENAMETOOLONG;
+       err = pathname_concat(buf, sizeof(buf), path, bpf_map__name(map));
+       if (err)
+               return err;
 
        return bpf_map__set_pin_path(map, buf);
 }
                        continue;
 
                if (path) {
-                       int len;
-
-                       len = snprintf(buf, PATH_MAX, "%s/%s", path,
-                                      bpf_map__name(map));
-                       if (len < 0) {
-                               err = -EINVAL;
-                               goto err_unpin_maps;
-                       } else if (len >= PATH_MAX) {
-                               err = -ENAMETOOLONG;
+                       err = pathname_concat(buf, sizeof(buf), path, bpf_map__name(map));
+                       if (err)
                                goto err_unpin_maps;
-                       }
                        sanitize_pin_path(buf);
                        pin_path = buf;
                } else if (!map->pin_path) {
                char buf[PATH_MAX];
 
                if (path) {
-                       int len;
-
-                       len = snprintf(buf, PATH_MAX, "%s/%s", path,
-                                      bpf_map__name(map));
-                       if (len < 0)
-                               return libbpf_err(-EINVAL);
-                       else if (len >= PATH_MAX)
-                               return libbpf_err(-ENAMETOOLONG);
+                       err = pathname_concat(buf, sizeof(buf), path, bpf_map__name(map));
+                       if (err)
+                               return libbpf_err(err);
                        sanitize_pin_path(buf);
                        pin_path = buf;
                } else if (!map->pin_path) {
 int bpf_object__pin_programs(struct bpf_object *obj, const char *path)
 {
        struct bpf_program *prog;
+       char buf[PATH_MAX];
        int err;
 
        if (!obj)
        }
 
        bpf_object__for_each_program(prog, obj) {
-               char buf[PATH_MAX];
-               int len;
-
-               len = snprintf(buf, PATH_MAX, "%s/%s", path, prog->name);
-               if (len < 0) {
-                       err = -EINVAL;
-                       goto err_unpin_programs;
-               } else if (len >= PATH_MAX) {
-                       err = -ENAMETOOLONG;
+               err = pathname_concat(buf, sizeof(buf), path, prog->name);
+               if (err)
                        goto err_unpin_programs;
-               }
 
                err = bpf_program__pin(prog, buf);
                if (err)
 
 err_unpin_programs:
        while ((prog = bpf_object__prev_program(obj, prog))) {
-               char buf[PATH_MAX];
-               int len;
-
-               len = snprintf(buf, PATH_MAX, "%s/%s", path, prog->name);
-               if (len < 0)
-                       continue;
-               else if (len >= PATH_MAX)
+               if (pathname_concat(buf, sizeof(buf), path, prog->name))
                        continue;
 
                bpf_program__unpin(prog, buf);
 
        bpf_object__for_each_program(prog, obj) {
                char buf[PATH_MAX];
-               int len;
 
-               len = snprintf(buf, PATH_MAX, "%s/%s", path, prog->name);
-               if (len < 0)
-                       return libbpf_err(-EINVAL);
-               else if (len >= PATH_MAX)
-                       return libbpf_err(-ENAMETOOLONG);
+               err = pathname_concat(buf, sizeof(buf), path, prog->name);
+               if (err)
+                       return libbpf_err(err);
 
                err = bpf_program__unpin(prog, buf);
                if (err)