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

📄 getpw_r.c

📁 linux 下的线程库源码
💻 C
字号:
#include <stddef.h>#include <string.h>#include <errno.h>#include <pwd.h>#include "../pthread.h"static pthread_mutex_t getpw_mutex = PTHREAD_MUTEX_INITIALIZER;static intconvert (struct passwd *ret, struct passwd *result,       char *buf, int buflen){  int len;  if (!buf) return -1;  *result = *ret;  result->pw_name = (char *) buf;  /* This is the size. */  len = strlen (ret->pw_name) + 1;  if (len > buflen) return -1;  buflen -= len;  buf += len;  strcpy (result->pw_name, ret->pw_name);  result->pw_passwd = (char *) buf;  /* This is the size. */  len = strlen (ret->pw_passwd) + 1;  if (len > buflen) return -1;  buflen -= len;  buf += len;  strcpy (result->pw_passwd, ret->pw_passwd);  result->pw_gecos = (char *) buf;  /* This is the size. */  len = strlen (ret->pw_gecos) + 1;  if (len > buflen) return -1;  buflen -= len;  buf += len;  strcpy (result->pw_gecos, ret->pw_gecos);  result->pw_dir = (char *) buf;  /* This is the size. */  len = strlen (ret->pw_dir) + 1;  if (len > buflen) return -1;  buflen -= len;  buf += len;  strcpy (result->pw_dir, ret->pw_dir);  result->pw_shell = (char *) buf;  /* This is the size. */  len = strlen (ret->pw_shell) + 1;  if (len > buflen) return -1;  buflen -= len;  buf += len;  strcpy (result->pw_shell, ret->pw_shell);  return 0;}int getpwnam_r (const char *name, struct passwd *result,                char *buffer, size_t buflen,                struct passwd ** resptr){  struct passwd * p;  int retval;  pthread_mutex_lock (&getpw_mutex);  p = getpwnam (name);  if (p == NULL) {    *resptr = NULL;    retval = ESRCH;  } else  if (convert (p, result, buffer, buflen) != 0) {    *resptr = NULL;    retval = ERANGE;  } else {    *resptr = result;    retval = 0;  }  pthread_mutex_unlock (&getpw_mutex);  return retval;}int getpwuid_r (uid_t uid, struct passwd *result,                 char *buffer, size_t buflen,                struct passwd ** resptr){  struct passwd * p;  int retval;  pthread_mutex_lock (&getpw_mutex);  p = getpwuid (uid);  if (p == NULL) {    *resptr = NULL;    retval = ESRCH;  } else  if (convert (p, result, buffer, buflen) != 0) {    *resptr = NULL;    retval = ERANGE;  } else {    *resptr = result;    retval = 0;  }  pthread_mutex_unlock (&getpw_mutex);  return retval;}

⌨️ 快捷键说明

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