|
|
看到这个函数真是佩服他们的谨慎。一个简单的加法函数,居然写成这样。
/* * Add two Size values, checking for overflow */Sizeadd_size(Size s1, Size s2){Sizeresult;result = s1 + s2;/* We are assuming Size is an unsigned type here... */if (result < s1 || result < s2)ereport(ERROR,(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("requested shared memory size overflows size_t")));return result;}
还考虑了溢出,真够谨慎的。
下面是乘法函数
/* * Multiply two Size values, checking for overflow */Sizemul_size(Size s1, Size s2){Sizeresult;if (s1 == 0 || s2 == 0)return 0;result = s1 * s2;/* We are assuming Size is an unsigned type here... */if (result / s2 != s1)ereport(ERROR,(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("requested shared memory size overflows size_t")));return result;} |
|