Ruby  2.7.2p137(2020-10-01revision5445e0435260b449decf2ac16f9d09bae3cafe72)
nan.c
Go to the documentation of this file.
1 #include "ruby/missing.h"
2 #include <assert.h>
3 #include <stdlib.h>
4 #include <string.h>
5 
6 double
7 nan(const char *spec)
8 {
9 #if 0
10  /* FIXME: we have not yet seen any situation this is
11  * necessary. Please write a proper implementation that
12  * covers this branch. */
13  if (spec && spec[0]) {
14  double generated_nan;
15  int len = snprintf(NULL, 0, "NAN(%s)", spec);
16  char *buf = malloc(len + 1); /* +1 for NUL */
17  sprintf(buf, "NAN(%s)", spec);
18  generated_nan = strtod(buf, NULL);
19  free(buf);
20  return generated_nan;
21  }
22  else
23 #endif
24  {
25  assert(!spec || !spec[0]);
26  return (double)NAN;
27  }
28 }
strtod
#define strtod(s, e)
Definition: util.h:76
assert
#define assert(x)
Definition: dlmalloc.c:1176
assert.h
NAN
#define NAN
Definition: missing.h:156
NULL
#define NULL
Definition: _sdbm.c:101
snprintf
int snprintf(char *__restrict, size_t, const char *__restrict,...) __attribute__((__format__(__printf__
sprintf
int sprintf(char *__restrict, const char *__restrict,...) __attribute__((__format__(__printf__
buf
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4322
missing.h
free
#define free(x)
Definition: dln.c:52
nan
double nan(const char *spec)
Definition: nan.c:7
len
uint8_t len
Definition: escape.c:17
malloc
void * malloc(size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(1)))