mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Re-run pgindent, fixing a problem where comment lines after a blank
comment line where output as too long, and update typedefs for /lib directory. Also fix case where identifiers were used as variable names in the backend, but as typedefs in ecpg (favor the backend for indenting). Backpatch to 8.1.X.
This commit is contained in:
@ -15,7 +15,7 @@
|
||||
char *ECPGalloc(long, int);
|
||||
|
||||
static int
|
||||
deccall2(decimal * arg1, decimal * arg2, int (*ptr) (numeric *, numeric *))
|
||||
deccall2(decimal *arg1, decimal *arg2, int (*ptr) (numeric *, numeric *))
|
||||
{
|
||||
numeric *a1,
|
||||
*a2;
|
||||
@ -53,7 +53,7 @@ deccall2(decimal * arg1, decimal * arg2, int (*ptr) (numeric *, numeric *))
|
||||
}
|
||||
|
||||
static int
|
||||
deccall3(decimal * arg1, decimal * arg2, decimal * result, int (*ptr) (numeric *, numeric *, numeric *))
|
||||
deccall3(decimal *arg1, decimal *arg2, decimal *result, int (*ptr) (numeric *, numeric *, numeric *))
|
||||
{
|
||||
numeric *a1,
|
||||
*a2,
|
||||
@ -118,7 +118,7 @@ deccall3(decimal * arg1, decimal * arg2, decimal * result, int (*ptr) (numeric *
|
||||
|
||||
/* we start with the numeric functions */
|
||||
int
|
||||
decadd(decimal * arg1, decimal * arg2, decimal * sum)
|
||||
decadd(decimal *arg1, decimal *arg2, decimal *sum)
|
||||
{
|
||||
deccall3(arg1, arg2, sum, PGTYPESnumeric_add);
|
||||
|
||||
@ -131,13 +131,13 @@ decadd(decimal * arg1, decimal * arg2, decimal * sum)
|
||||
}
|
||||
|
||||
int
|
||||
deccmp(decimal * arg1, decimal * arg2)
|
||||
deccmp(decimal *arg1, decimal *arg2)
|
||||
{
|
||||
return (deccall2(arg1, arg2, PGTYPESnumeric_cmp));
|
||||
}
|
||||
|
||||
void
|
||||
deccopy(decimal * src, decimal * target)
|
||||
deccopy(decimal *src, decimal *target)
|
||||
{
|
||||
memcpy(target, src, sizeof(decimal));
|
||||
}
|
||||
@ -162,7 +162,7 @@ ecpg_strndup(const char *str, size_t len)
|
||||
}
|
||||
|
||||
int
|
||||
deccvasc(char *cp, int len, decimal * np)
|
||||
deccvasc(char *cp, int len, decimal *np)
|
||||
{
|
||||
char *str = ecpg_strndup(cp, len); /* decimal_in always converts
|
||||
* the complete string */
|
||||
@ -207,7 +207,7 @@ deccvasc(char *cp, int len, decimal * np)
|
||||
}
|
||||
|
||||
int
|
||||
deccvdbl(double dbl, decimal * np)
|
||||
deccvdbl(double dbl, decimal *np)
|
||||
{
|
||||
numeric *nres = PGTYPESnumeric_new();
|
||||
int result = 1;
|
||||
@ -228,7 +228,7 @@ deccvdbl(double dbl, decimal * np)
|
||||
}
|
||||
|
||||
int
|
||||
deccvint(int in, decimal * np)
|
||||
deccvint(int in, decimal *np)
|
||||
{
|
||||
numeric *nres = PGTYPESnumeric_new();
|
||||
int result = 1;
|
||||
@ -249,7 +249,7 @@ deccvint(int in, decimal * np)
|
||||
}
|
||||
|
||||
int
|
||||
deccvlong(long lng, decimal * np)
|
||||
deccvlong(long lng, decimal *np)
|
||||
{
|
||||
numeric *nres = PGTYPESnumeric_new();
|
||||
int result = 1;
|
||||
@ -270,7 +270,7 @@ deccvlong(long lng, decimal * np)
|
||||
}
|
||||
|
||||
int
|
||||
decdiv(decimal * n1, decimal * n2, decimal * result)
|
||||
decdiv(decimal *n1, decimal *n2, decimal *result)
|
||||
{
|
||||
|
||||
int i;
|
||||
@ -295,7 +295,7 @@ decdiv(decimal * n1, decimal * n2, decimal * result)
|
||||
}
|
||||
|
||||
int
|
||||
decmul(decimal * n1, decimal * n2, decimal * result)
|
||||
decmul(decimal *n1, decimal *n2, decimal *result)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -316,7 +316,7 @@ decmul(decimal * n1, decimal * n2, decimal * result)
|
||||
}
|
||||
|
||||
int
|
||||
decsub(decimal * n1, decimal * n2, decimal * result)
|
||||
decsub(decimal *n1, decimal *n2, decimal *result)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -337,7 +337,7 @@ decsub(decimal * n1, decimal * n2, decimal * result)
|
||||
}
|
||||
|
||||
int
|
||||
dectoasc(decimal * np, char *cp, int len, int right)
|
||||
dectoasc(decimal *np, char *cp, int len, int right)
|
||||
{
|
||||
char *str;
|
||||
numeric *nres = PGTYPESnumeric_new();
|
||||
@ -372,7 +372,7 @@ dectoasc(decimal * np, char *cp, int len, int right)
|
||||
}
|
||||
|
||||
int
|
||||
dectodbl(decimal * np, double *dblp)
|
||||
dectodbl(decimal *np, double *dblp)
|
||||
{
|
||||
numeric *nres = PGTYPESnumeric_new();
|
||||
int i;
|
||||
@ -390,7 +390,7 @@ dectodbl(decimal * np, double *dblp)
|
||||
}
|
||||
|
||||
int
|
||||
dectoint(decimal * np, int *ip)
|
||||
dectoint(decimal *np, int *ip)
|
||||
{
|
||||
int ret;
|
||||
numeric *nres = PGTYPESnumeric_new();
|
||||
@ -410,7 +410,7 @@ dectoint(decimal * np, int *ip)
|
||||
}
|
||||
|
||||
int
|
||||
dectolong(decimal * np, long *lngp)
|
||||
dectolong(decimal *np, long *lngp)
|
||||
{
|
||||
int ret;
|
||||
numeric *nres = PGTYPESnumeric_new();;
|
||||
|
@ -21,7 +21,7 @@ typedef struct
|
||||
int sign; /* NUMERIC_POS, NUMERIC_NEG, or NUMERIC_NAN */
|
||||
NumericDigit *buf; /* start of alloc'd space for digits[] */
|
||||
NumericDigit *digits; /* decimal digits */
|
||||
} numeric;
|
||||
} numeric;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -31,14 +31,14 @@ typedef struct
|
||||
int dscale; /* display scale */
|
||||
int sign; /* NUMERIC_POS, NUMERIC_NEG, or NUMERIC_NAN */
|
||||
NumericDigit digits[DECSIZE]; /* decimal digits */
|
||||
} decimal;
|
||||
} decimal;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
numeric * PGTYPESnumeric_new(void);
|
||||
numeric *PGTYPESnumeric_new(void);
|
||||
void PGTYPESnumeric_free(numeric *);
|
||||
numeric *PGTYPESnumeric_from_asc(char *, char **);
|
||||
char *PGTYPESnumeric_to_asc(numeric *, int);
|
||||
|
@ -633,11 +633,11 @@ PGTYPESdate_defmt_asc(date * d, char *fmt, char *str)
|
||||
* here we found a month. token[token_count] and
|
||||
* token_values[token_count] reflect the month's details.
|
||||
*
|
||||
* only the month can be specified with a literal. Here we can do a quick
|
||||
* check if the month is at the right position according to the format
|
||||
* string because we can check if the token that we expect to be the
|
||||
* month is at the position of the only token that already has a
|
||||
* value. If we wouldn't check here we could say "December 4 1990"
|
||||
* only the month can be specified with a literal. Here we can do a
|
||||
* quick check if the month is at the right position according to the
|
||||
* format string because we can check if the token that we expect to
|
||||
* be the month is at the position of the only token that already has
|
||||
* a value. If we wouldn't check here we could say "December 4 1990"
|
||||
* with a fmt string of "dd mm yy" for 12 April 1990.
|
||||
*/
|
||||
if (fmt_token_order[token_count] != 'm')
|
||||
|
@ -784,8 +784,8 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
|
||||
* Print fractional seconds if any. The field widths here should
|
||||
* be at least equal to MAX_TIMESTAMP_PRECISION.
|
||||
*
|
||||
* In float mode, don't print fractional seconds before 1 AD, since
|
||||
* it's unlikely there's any precision left ...
|
||||
* In float mode, don't print fractional seconds before 1 AD,
|
||||
* since it's unlikely there's any precision left ...
|
||||
*/
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
if (fsec != 0)
|
||||
@ -834,8 +834,8 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
|
||||
* Print fractional seconds if any. The field widths here should
|
||||
* be at least equal to MAX_TIMESTAMP_PRECISION.
|
||||
*
|
||||
* In float mode, don't print fractional seconds before 1 AD, since
|
||||
* it's unlikely there's any precision left ...
|
||||
* In float mode, don't print fractional seconds before 1 AD,
|
||||
* since it's unlikely there's any precision left ...
|
||||
*/
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
if (fsec != 0)
|
||||
@ -880,8 +880,8 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
|
||||
* Print fractional seconds if any. The field widths here should
|
||||
* be at least equal to MAX_TIMESTAMP_PRECISION.
|
||||
*
|
||||
* In float mode, don't print fractional seconds before 1 AD, since
|
||||
* it's unlikely there's any precision left ...
|
||||
* In float mode, don't print fractional seconds before 1 AD,
|
||||
* since it's unlikely there's any precision left ...
|
||||
*/
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
if (fsec != 0)
|
||||
@ -934,8 +934,8 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
|
||||
* Print fractional seconds if any. The field widths here should
|
||||
* be at least equal to MAX_TIMESTAMP_PRECISION.
|
||||
*
|
||||
* In float mode, don't print fractional seconds before 1 AD, since
|
||||
* it's unlikely there's any precision left ...
|
||||
* In float mode, don't print fractional seconds before 1 AD,
|
||||
* since it's unlikely there's any precision left ...
|
||||
*/
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
if (fsec != 0)
|
||||
@ -1182,8 +1182,8 @@ DetermineLocalTimeZone(struct tm * tm)
|
||||
* localtime() call and delta calculation. We may have to do it
|
||||
* twice before we have a trustworthy delta.
|
||||
*
|
||||
* Note: think not to put a loop here, since if we've been given an
|
||||
* "impossible" local time (in the gap during a spring-forward
|
||||
* Note: think not to put a loop here, since if we've been given
|
||||
* an "impossible" local time (in the gap during a spring-forward
|
||||
* transition) we'd never get out of the loop. Twice is enough to
|
||||
* give the behavior we want, which is that "impossible" times are
|
||||
* taken as standard time, while at a fall-back boundary ambiguous
|
||||
@ -2542,12 +2542,13 @@ find_end_token(char *str, char *fmt)
|
||||
* functions gets called as find_end_token("28the day12the hour", "the
|
||||
* day%hthehour")
|
||||
*
|
||||
* fmt points to "the day%hthehour", next_percent points to %hthehour and we
|
||||
* have to find a match for everything between these positions ("the
|
||||
* fmt points to "the day%hthehour", next_percent points to %hthehour and
|
||||
* we have to find a match for everything between these positions ("the
|
||||
* day"). We look for "the day" in str and know that the pattern we are
|
||||
* about to scan ends where this string starts (right after the "28")
|
||||
*
|
||||
* At the end, *fmt is '\0' and *str isn't. end_position then is unchanged.
|
||||
* At the end, *fmt is '\0' and *str isn't. end_position then is
|
||||
* unchanged.
|
||||
*/
|
||||
char *end_position = NULL;
|
||||
char *next_percent,
|
||||
@ -2627,8 +2628,8 @@ find_end_token(char *str, char *fmt)
|
||||
*
|
||||
* and have set fmt to " " because overwrote the % sign with a NULL
|
||||
*
|
||||
* In this case where we would have to match a space but can't find it,
|
||||
* set end_position to the end of the string
|
||||
* In this case where we would have to match a space but can't find
|
||||
* it, set end_position to the end of the string
|
||||
*/
|
||||
if ((fmt + scan_offset)[0] == ' ' && fmt + scan_offset + 1 == subst_location)
|
||||
end_position = str + strlen(str);
|
||||
|
@ -28,7 +28,7 @@
|
||||
* ----------
|
||||
*/
|
||||
static int
|
||||
apply_typmod(numeric * var, long typmod)
|
||||
apply_typmod(numeric *var, long typmod)
|
||||
{
|
||||
int precision;
|
||||
int scale;
|
||||
@ -108,7 +108,7 @@ apply_typmod(numeric * var, long typmod)
|
||||
* ----------
|
||||
*/
|
||||
static int
|
||||
alloc_var(numeric * var, int ndigits)
|
||||
alloc_var(numeric *var, int ndigits)
|
||||
{
|
||||
digitbuf_free(var->buf);
|
||||
var->buf = digitbuf_alloc(ndigits + 1);
|
||||
@ -141,7 +141,7 @@ PGTYPESnumeric_new(void)
|
||||
* ----------
|
||||
*/
|
||||
static int
|
||||
set_var_from_str(char *str, char **ptr, numeric * dest)
|
||||
set_var_from_str(char *str, char **ptr, numeric *dest)
|
||||
{
|
||||
bool have_dp = FALSE;
|
||||
int i = 0;
|
||||
@ -271,7 +271,7 @@ set_var_from_str(char *str, char **ptr, numeric * dest)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_str_from_var(numeric * var, int dscale)
|
||||
get_str_from_var(numeric *var, int dscale)
|
||||
{
|
||||
char *str;
|
||||
char *cp;
|
||||
@ -384,7 +384,7 @@ PGTYPESnumeric_from_asc(char *str, char **endptr)
|
||||
}
|
||||
|
||||
char *
|
||||
PGTYPESnumeric_to_asc(numeric * num, int dscale)
|
||||
PGTYPESnumeric_to_asc(numeric *num, int dscale)
|
||||
{
|
||||
if (dscale < 0)
|
||||
dscale = num->dscale;
|
||||
@ -400,7 +400,7 @@ PGTYPESnumeric_to_asc(numeric * num, int dscale)
|
||||
* ----------
|
||||
*/
|
||||
static void
|
||||
zero_var(numeric * var)
|
||||
zero_var(numeric *var)
|
||||
{
|
||||
digitbuf_free(var->buf);
|
||||
var->buf = NULL;
|
||||
@ -411,7 +411,7 @@ zero_var(numeric * var)
|
||||
}
|
||||
|
||||
void
|
||||
PGTYPESnumeric_free(numeric * var)
|
||||
PGTYPESnumeric_free(numeric *var)
|
||||
{
|
||||
digitbuf_free(var->buf);
|
||||
free(var);
|
||||
@ -427,7 +427,7 @@ PGTYPESnumeric_free(numeric * var)
|
||||
* ----------
|
||||
*/
|
||||
static int
|
||||
cmp_abs(numeric * var1, numeric * var2)
|
||||
cmp_abs(numeric *var1, numeric *var2)
|
||||
{
|
||||
int i1 = 0;
|
||||
int i2 = 0;
|
||||
@ -485,7 +485,7 @@ cmp_abs(numeric * var1, numeric * var2)
|
||||
* ----------
|
||||
*/
|
||||
static int
|
||||
add_abs(numeric * var1, numeric * var2, numeric * result)
|
||||
add_abs(numeric *var1, numeric *var2, numeric *result)
|
||||
{
|
||||
NumericDigit *res_buf;
|
||||
NumericDigit *res_digits;
|
||||
@ -573,7 +573,7 @@ add_abs(numeric * var1, numeric * var2, numeric * result)
|
||||
* ----------
|
||||
*/
|
||||
static int
|
||||
sub_abs(numeric * var1, numeric * var2, numeric * result)
|
||||
sub_abs(numeric *var1, numeric *var2, numeric *result)
|
||||
{
|
||||
NumericDigit *res_buf;
|
||||
NumericDigit *res_digits;
|
||||
@ -657,7 +657,7 @@ sub_abs(numeric * var1, numeric * var2, numeric * result)
|
||||
* ----------
|
||||
*/
|
||||
int
|
||||
PGTYPESnumeric_add(numeric * var1, numeric * var2, numeric * result)
|
||||
PGTYPESnumeric_add(numeric *var1, numeric *var2, numeric *result)
|
||||
{
|
||||
/*
|
||||
* Decide on the signs of the two variables what to do
|
||||
@ -785,7 +785,7 @@ PGTYPESnumeric_add(numeric * var1, numeric * var2, numeric * result)
|
||||
* ----------
|
||||
*/
|
||||
int
|
||||
PGTYPESnumeric_sub(numeric * var1, numeric * var2, numeric * result)
|
||||
PGTYPESnumeric_sub(numeric *var1, numeric *var2, numeric *result)
|
||||
{
|
||||
/*
|
||||
* Decide on the signs of the two variables what to do
|
||||
@ -916,7 +916,7 @@ PGTYPESnumeric_sub(numeric * var1, numeric * var2, numeric * result)
|
||||
* ----------
|
||||
*/
|
||||
int
|
||||
PGTYPESnumeric_mul(numeric * var1, numeric * var2, numeric * result)
|
||||
PGTYPESnumeric_mul(numeric *var1, numeric *var2, numeric *result)
|
||||
{
|
||||
NumericDigit *res_buf;
|
||||
NumericDigit *res_digits;
|
||||
@ -1007,7 +1007,7 @@ PGTYPESnumeric_mul(numeric * var1, numeric * var2, numeric * result)
|
||||
* Note that this must be called before div_var.
|
||||
*/
|
||||
static int
|
||||
select_div_scale(numeric * var1, numeric * var2, int *rscale)
|
||||
select_div_scale(numeric *var1, numeric *var2, int *rscale)
|
||||
{
|
||||
int weight1,
|
||||
weight2,
|
||||
@ -1074,7 +1074,7 @@ select_div_scale(numeric * var1, numeric * var2, int *rscale)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_div(numeric * var1, numeric * var2, numeric * result)
|
||||
PGTYPESnumeric_div(numeric *var1, numeric *var2, numeric *result)
|
||||
{
|
||||
NumericDigit *res_digits;
|
||||
int res_ndigits;
|
||||
@ -1303,7 +1303,7 @@ done:
|
||||
|
||||
|
||||
int
|
||||
PGTYPESnumeric_cmp(numeric * var1, numeric * var2)
|
||||
PGTYPESnumeric_cmp(numeric *var1, numeric *var2)
|
||||
{
|
||||
|
||||
/* use cmp_abs function to calculate the result */
|
||||
@ -1333,7 +1333,7 @@ PGTYPESnumeric_cmp(numeric * var1, numeric * var2)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_from_int(signed int int_val, numeric * var)
|
||||
PGTYPESnumeric_from_int(signed int int_val, numeric *var)
|
||||
{
|
||||
/* implicit conversion */
|
||||
signed long int long_int = int_val;
|
||||
@ -1342,7 +1342,7 @@ PGTYPESnumeric_from_int(signed int int_val, numeric * var)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_from_long(signed long int long_val, numeric * var)
|
||||
PGTYPESnumeric_from_long(signed long int long_val, numeric *var)
|
||||
{
|
||||
/* calculate the size of the long int number */
|
||||
/* a number n needs log_10 n digits */
|
||||
@ -1412,7 +1412,7 @@ PGTYPESnumeric_from_long(signed long int long_val, numeric * var)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_copy(numeric * src, numeric * dst)
|
||||
PGTYPESnumeric_copy(numeric *src, numeric *dst)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -1435,7 +1435,7 @@ PGTYPESnumeric_copy(numeric * src, numeric * dst)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_from_double(double d, numeric * dst)
|
||||
PGTYPESnumeric_from_double(double d, numeric *dst)
|
||||
{
|
||||
char buffer[100];
|
||||
numeric *tmp;
|
||||
@ -1452,7 +1452,7 @@ PGTYPESnumeric_from_double(double d, numeric * dst)
|
||||
}
|
||||
|
||||
static int
|
||||
numericvar_to_double_no_overflow(numeric * var, double *dp)
|
||||
numericvar_to_double_no_overflow(numeric *var, double *dp)
|
||||
{
|
||||
char *tmp;
|
||||
double val;
|
||||
@ -1476,7 +1476,7 @@ numericvar_to_double_no_overflow(numeric * var, double *dp)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_to_double(numeric * nv, double *dp)
|
||||
PGTYPESnumeric_to_double(numeric *nv, double *dp)
|
||||
{
|
||||
double tmp;
|
||||
int i;
|
||||
@ -1488,7 +1488,7 @@ PGTYPESnumeric_to_double(numeric * nv, double *dp)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_to_int(numeric * nv, int *ip)
|
||||
PGTYPESnumeric_to_int(numeric *nv, int *ip)
|
||||
{
|
||||
long l;
|
||||
int i;
|
||||
@ -1507,7 +1507,7 @@ PGTYPESnumeric_to_int(numeric * nv, int *ip)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_to_long(numeric * nv, long *lp)
|
||||
PGTYPESnumeric_to_long(numeric *nv, long *lp)
|
||||
{
|
||||
int i;
|
||||
long l = 0;
|
||||
@ -1535,7 +1535,7 @@ PGTYPESnumeric_to_long(numeric * nv, long *lp)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_to_decimal(numeric * src, decimal * dst)
|
||||
PGTYPESnumeric_to_decimal(numeric *src, decimal *dst)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -1558,7 +1558,7 @@ PGTYPESnumeric_to_decimal(numeric * src, decimal * dst)
|
||||
}
|
||||
|
||||
int
|
||||
PGTYPESnumeric_from_decimal(decimal * src, numeric * dst)
|
||||
PGTYPESnumeric_from_decimal(decimal *src, numeric *dst)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
* exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.107 2005/10/24 15:38:37 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.108 2005/11/22 18:17:32 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -278,7 +278,6 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname, const char *s
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* KRB5 */
|
||||
|
||||
|
||||
@ -501,14 +500,13 @@ pg_fe_getauthname(char *PQerrormsg)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* pglock_thread() really only needs to be called around
|
||||
* pg_krb5_authname(), but some users are using configure
|
||||
* --enable-thread-safety-force, so we might as well do
|
||||
* the locking within our library to protect pqGetpwuid().
|
||||
* In fact, application developers can use getpwuid()
|
||||
* in their application if they use the locking call we
|
||||
* provide, or install their own locking function using
|
||||
* PQregisterThreadLock().
|
||||
* pglock_thread() really only needs to be called around
|
||||
* pg_krb5_authname(), but some users are using configure
|
||||
* --enable-thread-safety-force, so we might as well do the locking within
|
||||
* our library to protect pqGetpwuid(). In fact, application developers
|
||||
* can use getpwuid() in their application if they use the locking call we
|
||||
* provide, or install their own locking function using
|
||||
* PQregisterThreadLock().
|
||||
*/
|
||||
pglock_thread();
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.h,v 1.23 2005/10/17 16:24:20 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.h,v 1.24 2005/11/22 18:17:32 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
|
||||
extern int pg_fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname,
|
||||
const char *password, char *PQerrormsg);
|
||||
const char *password, char *PQerrormsg);
|
||||
extern char *pg_fe_getauthname(char *PQerrormsg);
|
||||
|
||||
#endif /* FE_AUTH_H */
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.323 2005/10/17 16:24:20 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.324 2005/11/22 18:17:32 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -370,8 +370,8 @@ connectOptions1(PGconn *conn, const char *conninfo)
|
||||
/*
|
||||
* Move option values into conn structure
|
||||
*
|
||||
* Don't put anything cute here --- intelligence should be in connectOptions2
|
||||
* ...
|
||||
* Don't put anything cute here --- intelligence should be in
|
||||
* connectOptions2 ...
|
||||
*
|
||||
* XXX: probably worth checking strdup() return value here...
|
||||
*/
|
||||
@ -687,7 +687,7 @@ connectFailureMessage(PGconn *conn, int errorno)
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("could not connect to server: %s\n"
|
||||
"\tIs the server running locally and accepting\n"
|
||||
"\tconnections on Unix domain socket \"%s\"?\n"),
|
||||
"\tconnections on Unix domain socket \"%s\"?\n"),
|
||||
SOCK_STRERROR(errorno, sebuf, sizeof(sebuf)),
|
||||
service);
|
||||
}
|
||||
@ -1003,7 +1003,7 @@ keep_going: /* We will come back to here until there is
|
||||
/*
|
||||
* Try to initiate a connection to one of the addresses
|
||||
* returned by pg_getaddrinfo_all(). conn->addr_cur is the
|
||||
* next one to try. We fail when we run out of addresses
|
||||
* next one to try. We fail when we run out of addresses
|
||||
* (reporting the error returned for the *last* alternative,
|
||||
* which may not be what users expect :-().
|
||||
*/
|
||||
@ -1226,8 +1226,9 @@ keep_going: /* We will come back to here until there is
|
||||
/*
|
||||
* Send the SSL request packet.
|
||||
*
|
||||
* Theoretically, this could block, but it really shouldn't
|
||||
* since we only got here if the socket is write-ready.
|
||||
* Theoretically, this could block, but it really
|
||||
* shouldn't since we only got here if the socket is
|
||||
* write-ready.
|
||||
*/
|
||||
pv = htonl(NEGOTIATE_SSL_CODE);
|
||||
if (pqPacketSend(conn, 0, &pv, sizeof(pv)) != STATUS_OK)
|
||||
@ -1262,8 +1263,8 @@ keep_going: /* We will come back to here until there is
|
||||
/*
|
||||
* Send the startup packet.
|
||||
*
|
||||
* Theoretically, this could block, but it really shouldn't since
|
||||
* we only got here if the socket is write-ready.
|
||||
* Theoretically, this could block, but it really shouldn't
|
||||
* since we only got here if the socket is write-ready.
|
||||
*/
|
||||
if (pqPacketSend(conn, 0, startpacket, packetlen) != STATUS_OK)
|
||||
{
|
||||
@ -1500,8 +1501,8 @@ keep_going: /* We will come back to here until there is
|
||||
/*
|
||||
* Can't process if message body isn't all here yet.
|
||||
*
|
||||
* (In protocol 2.0 case, we are assuming messages carry at least
|
||||
* 4 bytes of data.)
|
||||
* (In protocol 2.0 case, we are assuming messages carry at
|
||||
* least 4 bytes of data.)
|
||||
*/
|
||||
msgLength -= 4;
|
||||
avail = conn->inEnd - conn->inCursor;
|
||||
@ -1829,8 +1830,8 @@ makeEmptyPGconn(void)
|
||||
* bufferloads. The output buffer is initially made 16K in size, and we
|
||||
* try to dump it after accumulating 8K.
|
||||
*
|
||||
* With the same goal of minimizing context swaps, the input buffer will be
|
||||
* enlarged anytime it has less than 8K free, so we initially allocate
|
||||
* With the same goal of minimizing context swaps, the input buffer will
|
||||
* be enlarged anytime it has less than 8K free, so we initially allocate
|
||||
* twice that.
|
||||
*/
|
||||
conn->inBufSize = 16 * 1024;
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.176 2005/10/15 02:49:48 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.177 2005/11/22 18:17:32 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -454,7 +454,7 @@ pqPrepareAsyncResult(PGconn *conn)
|
||||
* a trailing newline, and should not be more than one line).
|
||||
*/
|
||||
void
|
||||
pqInternalNotice(const PGNoticeHooks * hooks, const char *fmt,...)
|
||||
pqInternalNotice(const PGNoticeHooks *hooks, const char *fmt,...)
|
||||
{
|
||||
char msgBuf[1024];
|
||||
va_list args;
|
||||
@ -505,20 +505,20 @@ pqInternalNotice(const PGNoticeHooks * hooks, const char *fmt,...)
|
||||
* Returns TRUE if OK, FALSE if not enough memory to add the row
|
||||
*/
|
||||
int
|
||||
pqAddTuple(PGresult *res, PGresAttValue * tup)
|
||||
pqAddTuple(PGresult *res, PGresAttValue *tup)
|
||||
{
|
||||
if (res->ntups >= res->tupArrSize)
|
||||
{
|
||||
/*
|
||||
* Try to grow the array.
|
||||
*
|
||||
* We can use realloc because shallow copying of the structure is okay.
|
||||
* Note that the first time through, res->tuples is NULL. While ANSI
|
||||
* says that realloc() should act like malloc() in that case, some old
|
||||
* C libraries (like SunOS 4.1.x) coredump instead. On failure realloc
|
||||
* is supposed to return NULL without damaging the existing
|
||||
* allocation. Note that the positions beyond res->ntups are garbage,
|
||||
* not necessarily NULL.
|
||||
* We can use realloc because shallow copying of the structure is
|
||||
* okay. Note that the first time through, res->tuples is NULL. While
|
||||
* ANSI says that realloc() should act like malloc() in that case,
|
||||
* some old C libraries (like SunOS 4.1.x) coredump instead. On
|
||||
* failure realloc is supposed to return NULL without damaging the
|
||||
* existing allocation. Note that the positions beyond res->ntups are
|
||||
* garbage, not necessarily NULL.
|
||||
*/
|
||||
int newSize = (res->tupArrSize > 0) ? res->tupArrSize * 2 : 128;
|
||||
PGresAttValue **newTuples;
|
||||
@ -594,7 +594,7 @@ pqSaveParameterStatus(PGconn *conn, const char *name, const char *value)
|
||||
* Store new info as a single malloc block
|
||||
*/
|
||||
pstatus = (pgParameterStatus *) malloc(sizeof(pgParameterStatus) +
|
||||
strlen(name) + strlen(value) + 2);
|
||||
strlen(name) +strlen(value) + 2);
|
||||
if (pstatus)
|
||||
{
|
||||
char *ptr;
|
||||
|
@ -23,7 +23,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-misc.c,v 1.122 2005/10/15 02:49:48 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-misc.c,v 1.123 2005/11/22 18:17:33 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -566,8 +566,8 @@ pqReadData(PGconn *conn)
|
||||
|
||||
/*
|
||||
* If the buffer is fairly full, enlarge it. We need to be able to enlarge
|
||||
* the buffer in case a single message exceeds the initial buffer size.
|
||||
* We enlarge before filling the buffer entirely so as to avoid asking the
|
||||
* the buffer in case a single message exceeds the initial buffer size. We
|
||||
* enlarge before filling the buffer entirely so as to avoid asking the
|
||||
* kernel for a partial packet. The magic constant here should be large
|
||||
* enough for a TCP packet or Unix pipe bufferload. 8K is the usual pipe
|
||||
* buffer size, so...
|
||||
@ -623,9 +623,9 @@ retry3:
|
||||
* buffer space. Without this, the block-and-restart behavior of
|
||||
* libpq's higher levels leads to O(N^2) performance on long messages.
|
||||
*
|
||||
* Since we left-justified the data above, conn->inEnd gives the amount
|
||||
* of data already read in the current message. We consider the
|
||||
* message "long" once we have acquired 32k ...
|
||||
* Since we left-justified the data above, conn->inEnd gives the
|
||||
* amount of data already read in the current message. We consider
|
||||
* the message "long" once we have acquired 32k ...
|
||||
*/
|
||||
if (conn->inEnd > 32768 &&
|
||||
(conn->inBufSize - conn->inEnd) >= 8192)
|
||||
@ -648,10 +648,10 @@ retry3:
|
||||
* since in normal practice we should not be trying to read data unless
|
||||
* the file selected for reading already.
|
||||
*
|
||||
* In SSL mode it's even worse: SSL_read() could say WANT_READ and then data
|
||||
* could arrive before we make the pqReadReady() test. So we must play
|
||||
* dumb and assume there is more data, relying on the SSL layer to detect
|
||||
* true EOF.
|
||||
* In SSL mode it's even worse: SSL_read() could say WANT_READ and then
|
||||
* data could arrive before we make the pqReadReady() test. So we must
|
||||
* play dumb and assume there is more data, relying on the SSL layer to
|
||||
* detect true EOF.
|
||||
*/
|
||||
|
||||
#ifdef USE_SSL
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-protocol2.c,v 1.19 2005/10/15 02:49:48 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-protocol2.c,v 1.20 2005/11/22 18:17:33 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -379,9 +379,9 @@ pqParseInput2(PGconn *conn)
|
||||
* NOTIFY and NOTICE messages can happen in any state besides COPY
|
||||
* OUT; always process them right away.
|
||||
*
|
||||
* Most other messages should only be processed while in BUSY state. (In
|
||||
* particular, in READY state we hold off further parsing until the
|
||||
* application collects the current PGresult.)
|
||||
* Most other messages should only be processed while in BUSY state.
|
||||
* (In particular, in READY state we hold off further parsing until
|
||||
* the application collects the current PGresult.)
|
||||
*
|
||||
* However, if the state is IDLE then we got trouble; we need to deal
|
||||
* with the unexpected message somehow.
|
||||
@ -1420,7 +1420,7 @@ pqFunctionCall2(PGconn *conn, Oid fnid,
|
||||
*/
|
||||
char *
|
||||
pqBuildStartupPacket2(PGconn *conn, int *packetlen,
|
||||
const PQEnvironmentOption * options)
|
||||
const PQEnvironmentOption *options)
|
||||
{
|
||||
StartupPacket *startpacket;
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-protocol3.c,v 1.22 2005/10/15 02:49:48 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-protocol3.c,v 1.23 2005/11/22 18:17:33 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -52,7 +52,7 @@ static int getNotify(PGconn *conn);
|
||||
static int getCopyStart(PGconn *conn, ExecStatusType copytype);
|
||||
static int getReadyForQuery(PGconn *conn);
|
||||
static int build_startup_packet(const PGconn *conn, char *packet,
|
||||
const PQEnvironmentOption * options);
|
||||
const PQEnvironmentOption *options);
|
||||
|
||||
|
||||
/*
|
||||
@ -130,9 +130,9 @@ pqParseInput3(PGconn *conn)
|
||||
* NOTIFY and NOTICE messages can happen in any state; always process
|
||||
* them right away.
|
||||
*
|
||||
* Most other messages should only be processed while in BUSY state. (In
|
||||
* particular, in READY state we hold off further parsing until the
|
||||
* application collects the current PGresult.)
|
||||
* Most other messages should only be processed while in BUSY state.
|
||||
* (In particular, in READY state we hold off further parsing until
|
||||
* the application collects the current PGresult.)
|
||||
*
|
||||
* However, if the state is IDLE then we got trouble; we need to deal
|
||||
* with the unexpected message somehow.
|
||||
@ -1430,7 +1430,7 @@ pqFunctionCall3(PGconn *conn, Oid fnid,
|
||||
*/
|
||||
char *
|
||||
pqBuildStartupPacket3(PGconn *conn, int *packetlen,
|
||||
const PQEnvironmentOption * options)
|
||||
const PQEnvironmentOption *options)
|
||||
{
|
||||
char *startpacket;
|
||||
|
||||
@ -1453,7 +1453,7 @@ pqBuildStartupPacket3(PGconn *conn, int *packetlen,
|
||||
*/
|
||||
static int
|
||||
build_startup_packet(const PGconn *conn, char *packet,
|
||||
const PQEnvironmentOption * options)
|
||||
const PQEnvironmentOption *options)
|
||||
{
|
||||
int packet_len = 0;
|
||||
const PQEnvironmentOption *next_eo;
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-fe.h,v 1.120 2005/10/15 02:49:48 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-fe.h,v 1.121 2005/11/22 18:17:33 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -35,7 +35,7 @@ extern "C"
|
||||
|
||||
/* Application-visible enum types */
|
||||
|
||||
typedef enum
|
||||
typedef enum
|
||||
{
|
||||
/*
|
||||
* Although it is okay to add to this list, values which become unused
|
||||
|
@ -12,7 +12,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.108 2005/10/15 02:49:49 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.109 2005/11/22 18:17:33 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -92,7 +92,7 @@ typedef struct pgresAttDesc
|
||||
Oid typid; /* type id */
|
||||
int typlen; /* type size */
|
||||
int atttypmod; /* type-specific modifier info */
|
||||
} PGresAttDesc;
|
||||
} PGresAttDesc;
|
||||
|
||||
/*
|
||||
* Data for a single attribute of a single tuple
|
||||
@ -118,7 +118,7 @@ typedef struct pgresAttValue
|
||||
{
|
||||
int len; /* length in bytes of the value */
|
||||
char *value; /* actual value, plus terminating zero byte */
|
||||
} PGresAttValue;
|
||||
} PGresAttValue;
|
||||
|
||||
/* Typedef for message-field list entries */
|
||||
typedef struct pgMessageField
|
||||
@ -126,7 +126,7 @@ typedef struct pgMessageField
|
||||
struct pgMessageField *next; /* list link */
|
||||
char code; /* field code */
|
||||
char contents[1]; /* field value (VARIABLE LENGTH) */
|
||||
} PGMessageField;
|
||||
} PGMessageField;
|
||||
|
||||
/* Fields needed for notice handling */
|
||||
typedef struct
|
||||
@ -135,7 +135,7 @@ typedef struct
|
||||
void *noticeRecArg;
|
||||
PQnoticeProcessor noticeProc; /* notice message processor */
|
||||
void *noticeProcArg;
|
||||
} PGNoticeHooks;
|
||||
} PGNoticeHooks;
|
||||
|
||||
struct pg_result
|
||||
{
|
||||
@ -186,7 +186,7 @@ typedef enum
|
||||
PGASYNC_READY, /* result ready for PQgetResult */
|
||||
PGASYNC_COPY_IN, /* Copy In data transfer in progress */
|
||||
PGASYNC_COPY_OUT /* Copy Out data transfer in progress */
|
||||
} PGAsyncStatusType;
|
||||
} PGAsyncStatusType;
|
||||
|
||||
/* PGQueryClass tracks which query protocol we are now executing */
|
||||
typedef enum
|
||||
@ -194,7 +194,7 @@ typedef enum
|
||||
PGQUERY_SIMPLE, /* simple Query protocol (PQexec) */
|
||||
PGQUERY_EXTENDED, /* full Extended protocol (PQexecParams) */
|
||||
PGQUERY_PREPARE /* Parse only (PQprepare) */
|
||||
} PGQueryClass;
|
||||
} PGQueryClass;
|
||||
|
||||
/* PGSetenvStatusType defines the state of the PQSetenv state machine */
|
||||
/* (this is used only for 2.0-protocol connections) */
|
||||
@ -207,14 +207,14 @@ typedef enum
|
||||
SETENV_STATE_QUERY2_SEND, /* About to send a status query */
|
||||
SETENV_STATE_QUERY2_WAIT, /* Waiting for query to complete */
|
||||
SETENV_STATE_IDLE
|
||||
} PGSetenvStatusType;
|
||||
} PGSetenvStatusType;
|
||||
|
||||
/* Typedef for the EnvironmentOptions[] array */
|
||||
typedef struct PQEnvironmentOption
|
||||
{
|
||||
const char *envName, /* name of an environment variable */
|
||||
*pgName; /* name of corresponding SET variable */
|
||||
} PQEnvironmentOption;
|
||||
} PQEnvironmentOption;
|
||||
|
||||
/* Typedef for parameter-status list entries */
|
||||
typedef struct pgParameterStatus
|
||||
@ -223,7 +223,7 @@ typedef struct pgParameterStatus
|
||||
char *name; /* parameter name */
|
||||
char *value; /* parameter value */
|
||||
/* Note: name and value are stored in same malloc block as struct is */
|
||||
} pgParameterStatus;
|
||||
} pgParameterStatus;
|
||||
|
||||
/* large-object-access data ... allocated only if large-object code is used. */
|
||||
typedef struct pgLobjfuncs
|
||||
@ -237,7 +237,7 @@ typedef struct pgLobjfuncs
|
||||
Oid fn_lo_tell; /* OID of backend function lo_tell */
|
||||
Oid fn_lo_read; /* OID of backend function LOread */
|
||||
Oid fn_lo_write; /* OID of backend function LOwrite */
|
||||
} PGlobjfuncs;
|
||||
} PGlobjfuncs;
|
||||
|
||||
/*
|
||||
* PGconn stores all the state data associated with a single connection
|
||||
@ -402,10 +402,10 @@ extern void pqClearAsyncResult(PGconn *conn);
|
||||
extern void pqSaveErrorResult(PGconn *conn);
|
||||
extern PGresult *pqPrepareAsyncResult(PGconn *conn);
|
||||
extern void
|
||||
pqInternalNotice(const PGNoticeHooks * hooks, const char *fmt,...)
|
||||
pqInternalNotice(const PGNoticeHooks *hooks, const char *fmt,...)
|
||||
/* This lets gcc check the format string for consistency. */
|
||||
__attribute__((format(printf, 2, 3)));
|
||||
extern int pqAddTuple(PGresult *res, PGresAttValue * tup);
|
||||
extern int pqAddTuple(PGresult *res, PGresAttValue *tup);
|
||||
extern void pqSaveMessageField(PGresult *res, char code,
|
||||
const char *value);
|
||||
extern void pqSaveParameterStatus(PGconn *conn, const char *name,
|
||||
@ -417,7 +417,7 @@ extern void pqHandleSendFailure(PGconn *conn);
|
||||
extern PostgresPollingStatusType pqSetenvPoll(PGconn *conn);
|
||||
|
||||
extern char *pqBuildStartupPacket2(PGconn *conn, int *packetlen,
|
||||
const PQEnvironmentOption * options);
|
||||
const PQEnvironmentOption *options);
|
||||
extern void pqParseInput2(PGconn *conn);
|
||||
extern int pqGetCopyData2(PGconn *conn, char **buffer, int async);
|
||||
extern int pqGetline2(PGconn *conn, char *s, int maxlen);
|
||||
@ -431,7 +431,7 @@ extern PGresult *pqFunctionCall2(PGconn *conn, Oid fnid,
|
||||
/* === in fe-protocol3.c === */
|
||||
|
||||
extern char *pqBuildStartupPacket3(PGconn *conn, int *packetlen,
|
||||
const PQEnvironmentOption * options);
|
||||
const PQEnvironmentOption *options);
|
||||
extern void pqParseInput3(PGconn *conn);
|
||||
extern int pqGetErrorNotice3(PGconn *conn, bool isError);
|
||||
extern int pqGetCopyData3(PGconn *conn, char **buffer, int async);
|
||||
|
@ -13,7 +13,7 @@ void *pthread_getspecific(pthread_key_t);
|
||||
void pthread_mutex_init(pthread_mutex_t *, void *attr);
|
||||
void pthread_mutex_lock(pthread_mutex_t *);
|
||||
|
||||
//blocking
|
||||
/* blocking */
|
||||
void pthread_mutex_unlock(pthread_mutex_t *);
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user