snprintf.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:1k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1996-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: snprintf.c,v 11.10 2002/01/11 15:51:28 bostic Exp $";
  10. #endif /* not lint */
  11. #ifndef NO_SYSTEM_INCLUDES
  12. #include <sys/types.h>
  13. #include <stdio.h>
  14. #endif
  15. #include "db_int.h"
  16. /*
  17.  * snprintf --
  18.  * Bounded version of sprintf.
  19.  *
  20.  * PUBLIC: #ifndef HAVE_SNPRINTF
  21.  * PUBLIC: int snprintf __P((char *, size_t, const char *, ...));
  22.  * PUBLIC: #endif
  23.  */
  24. #ifndef HAVE_SNPRINTF
  25. int
  26. #ifdef __STDC__
  27. snprintf(char *str, size_t n, const char *fmt, ...)
  28. #else
  29. snprintf(str, n, fmt, va_alist)
  30. char *str;
  31. size_t n;
  32. const char *fmt;
  33. va_dcl
  34. #endif
  35. {
  36. static int ret_charpnt = -1;
  37. va_list ap;
  38. int len;
  39. COMPQUIET(n, 0);
  40. /*
  41.  * Some old versions of sprintf return a pointer to the first argument
  42.  * instead of a character count.  Assume the return value of snprintf,
  43.  * vsprintf, etc. will be the same as sprintf, and check the easy one.
  44.  *
  45.  * We do this test at run-time because it's not a test we can do in a
  46.  * cross-compilation environment.
  47.  */
  48. if (ret_charpnt == -1) {
  49. char buf[10];
  50. ret_charpnt =
  51.     sprintf(buf, "123") != 3 ||
  52.     sprintf(buf, "123456789") != 9 ||
  53.     sprintf(buf, "1234") != 4;
  54. }
  55. #ifdef __STDC__
  56. va_start(ap, fmt);
  57. #else
  58. va_start(ap);
  59. #endif
  60. len = vsprintf(str, fmt, ap);
  61. va_end(ap);
  62. return (ret_charpnt ? (int)strlen(str) : len);
  63. }
  64. #endif