Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
8e97f45f
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8e97f45f
编写于
8月 14, 2003
作者:
B
Bruce Momjian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Document threading status.
Update to POSIX getpwuid_r() function.
上级
a4a31d39
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
40 addition
and
11 deletion
+40
-11
src/port/thread.c
src/port/thread.c
+40
-11
未找到文件。
src/port/thread.c
浏览文件 @
8e97f45f
...
...
@@ -7,13 +7,41 @@
*
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
*
* $Id: thread.c,v 1.
2 2003/08/08 03:09:56
momjian Exp $
* $Id: thread.c,v 1.
3 2003/08/14 05:27:18
momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
/*
* Threading sometimes requires specially-named versions of functions
* that return data in static buffers, like strerror_r() instead of
* strerror(). Other operating systems use pthread_setspecific()
* and pthread_getspecific() internally to allow standard library
* functions to return static data to threaded applications.
*
* Additional confusion exists because many operating systems that
* use pthread_setspecific/pthread_getspecific() also have *_r versions
* of standard library functions for compatibility with operating systems
* that require them. However, internally, these *_r functions merely
* call the thread-safe standard library functions.
*
* For example, BSD/OS 4.3 uses Bind 8.2.3 for getpwuid(). Internally,
* getpwuid() calls pthread_setspecific/pthread_getspecific() to return
* static data to the caller in a thread-safe manner. However, BSD/OS
* also has getpwuid_r(), which merely calls getpwuid() and shifts
* around the arguments to match the getpwuid_r() function declaration.
* Therefore, while BSD/OS has getpwuid_r(), it isn't required. It also
* doesn't have strerror_r(), so we can't fall back to only using *_r
* functions for threaded programs.
*
* The current setup is to assume either all standard functions are
* thread-safe (NEED_REENTRANT_FUNC_NAMES=no), or the operating system
* requires reentrant function names (NEED_REENTRANT_FUNC_NAMES=yes).
*/
/*
* Wrapper around strerror and strerror_r to use the former if it is
* available and also return a more useful value (the error string).
...
...
@@ -34,19 +62,20 @@ pqStrerror(int errnum, char *strerrbuf, size_t buflen)
/*
* Wrapper around getpwuid() or getpwuid_r() to mimic POSIX getpwuid_r()
* behaviour, if it is not available.
* behaviour, if it is not available
or required
.
*/
int
pqGetpwuid
(
uid_t
uid
,
struct
passwd
*
resultbuf
,
char
*
buffer
,
size_t
buflen
,
struct
passwd
**
result
)
pqGetpwuid
(
uid_t
uid
,
struct
passwd
*
resultbuf
,
char
*
buffer
,
size_t
buflen
,
struct
passwd
**
result
)
{
#if defined(USE_THREADS) && defined(HAVE_GETPWUID_R)
/*
* broken (well early POSIX draft) getpwuid_r() which returns 'struct
* passwd *'
* Early POSIX draft of getpwuid_r() returns 'struct passwd *'.
* getpwuid_r(uid, resultbuf, buffer, buflen)
* Do we need to support it? bjm 2003-08-14
*/
*
result
=
getpwuid_r
(
uid
,
resultbuf
,
buffer
,
buflen
);
/* POSIX version */
getpwuid_r
(
uid
,
resultbuf
,
buffer
,
buflen
,
result
);
#else
/* no getpwuid_r() available, just use getpwuid() */
*
result
=
getpwuid
(
uid
);
...
...
@@ -56,13 +85,13 @@ pqGetpwuid(uid_t uid, struct passwd * resultbuf, char *buffer,
/*
* Wrapper around gethostbyname() or gethostbyname_r() to mimic
* POSIX gethostbyname_r() behaviour, if it is not available.
* POSIX gethostbyname_r() behaviour, if it is not available
or required
.
*/
int
pqGethostbyname
(
const
char
*
name
,
struct
hostent
*
resbuf
,
struct
hostent
*
resbuf
,
char
*
buf
,
size_t
buflen
,
struct
hostent
**
result
,
struct
hostent
**
result
,
int
*
herrno
)
{
#if defined(USE_THREADS) && defined(HAVE_GETHOSTBYNAME_R)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录