All pastes #423823 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-04-04 12:53 UTC
rendered paste body
// 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;
}