// Prepare socket path for addr.sun_path[]// Returns the path length minus the terminating '\0'static int _rpc_socket_path(char **pathp, const char *ident){ if (pathp == NULL) return 0; char *path; int n, len;#if USE_ANONYMOUS_SOCKETS n = 0;#else // XXX don't use TMPDIR because the length of the resulting path // could exceed the size of sun_path[] (typically 108 bytes on Linux) char *tmpdir = "/tmp"; n = strlen(tmpdir);#endif len = strlen(ident); if ((path = (char *)malloc(n + 1 + len + 1)) == NULL) return 0;#if USE_ANONYMOUS_SOCKETS path[0] = 0; strcpy(&path[1], ident); n = 1 + len;#else n = sprintf(path, "%s/", tmpdir); for (int i = 0; i < len; i++) { char ch = ident[i]; if (ch == '/') ch = '_'; path[n++] = ch; } path[n] = '\0';#endif if (*pathp) free(*pathp); *pathp = path; return n;}