⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getservby_r.c

📁 linux 下的线程库源码
💻 C
字号:
#include "../pthread.h"#include <netdb.h>#include <string.h>static pthread_mutex_t getservby_mutex = PTHREAD_MUTEX_INITIALIZER;static intconvert (struct servent *ret, struct servent *result,       char *buf, int buflen){  int len, i;  if (!buf) return -1;  *result = *ret;  /* This is the size. */  len = strlen (ret->s_name) + 1;  if (len > buflen) return -1;  buflen -= len;  result->s_name = (char *) buf;  buf += len;  strcpy (result->s_name, ret->s_name);  /* How many aliases and how big the buffer should be? There     is always a NULL pointer. */  for (len = sizeof (char *), i = 0; ret->s_aliases [i]; i++)  {    /* It should be size of (char *) and the length of string       plus 1. */    len += strlen (ret->s_aliases [i]) + 1 + sizeof (char *);  }  if (len > buflen) return -1;  buflen -= len;  /* This is an array of char * for s_aliases. */  result->s_aliases = (char **) buf;  buf += (i + 1) * sizeof (char *);  /* We copy the aliases now. */  for (i = 0; ret->s_aliases [i]; i++)  {    result->s_aliases [i] = (char *) buf;    strcpy (result->s_aliases [i], ret->s_aliases [i]);    buf += strlen (ret->s_aliases [i]) + 1;  }  /* This is the last one */  result->s_aliases [i] = NULL;  /* s_proto */  len = strlen (ret->s_proto) + 1;  if (len > buflen) return -1;  buf += len;  result->s_proto = (char *) buf;  strcpy (result->s_proto, ret->s_proto);  return 0;}struct servent *getservbyport_r (int port, const char *proto,       struct servent *result, char *buffer, int buflen){  struct servent *ret;  pthread_mutex_lock (&getservby_mutex);  ret = getservbyport (port, proto);  if (!ret ||       convert (ret, result, buffer, buflen) != 0)  {    result = NULL;  }  pthread_mutex_unlock (&getservby_mutex);  return result;}struct servent *getservbyname_r (const char *name, const char *proto,       struct servent *result, char *buffer, int buflen){  struct servent *ret;  pthread_mutex_lock (&getservby_mutex);  ret = getservbyname (name, proto);  if (!ret ||       convert (ret, result, buffer, buflen) != 0)  {    result = NULL;  }  pthread_mutex_unlock (&getservby_mutex);  return result;}struct servent *getservent_r (struct servent *result, char *buffer, int buflen){  struct servent *ret;  pthread_mutex_lock (&getservby_mutex);  ret = getservent ();  if (!ret ||       convert (ret, result, buffer, buflen) != 0)  {    result = NULL;  }  pthread_mutex_unlock (&getservby_mutex);  return result;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -