Hex Artifact Content
Not logged in

Artifact f28d1c341b69ce9ad1bb9d21da3b65b49ad8b8dd:


0000: 23 69 66 6e 64 65 66 20 50 48 50 5f 50 4f 52 54  #ifndef PHP_PORT
0010: 41 42 4c 45 5f 48 0a 23 64 65 66 69 6e 65 20 50  ABLE_H.#define P
0020: 48 50 5f 50 4f 52 54 41 42 4c 45 5f 48 0a 0a 23  HP_PORTABLE_H..#
0030: 69 66 20 50 48 50 5f 4d 41 4a 4f 52 5f 56 45 52  if PHP_MAJOR_VER
0040: 53 49 4f 4e 20 3c 20 37 0a 0a 73 74 72 75 63 74  SION < 7..struct
0050: 20 5f 7a 65 6e 64 5f 73 74 72 69 6e 67 20 7b 0a   _zend_string {.
0060: 09 63 68 61 72 20 2a 76 61 6c 3b 0a 09 69 6e 74  .char *val;..int
0070: 20 6c 65 6e 3b 0a 09 69 6e 74 20 70 65 72 73 69   len;..int persi
0080: 73 74 65 6e 74 3b 0a 7d 3b 0a 74 79 70 65 64 65  stent;.};.typede
0090: 66 20 73 74 72 75 63 74 20 5f 7a 65 6e 64 5f 73  f struct _zend_s
00a0: 74 72 69 6e 67 20 7a 65 6e 64 5f 73 74 72 69 6e  tring zend_strin
00b0: 67 3b 0a 0a 23 64 65 66 69 6e 65 20 52 45 54 55  g;..#define RETU
00c0: 52 4e 5f 4e 45 57 5f 53 54 52 28 73 29 20 20 20  RN_NEW_STR(s)   
00d0: 20 20 52 45 54 55 52 4e 5f 53 54 52 49 4e 47 4c    RETURN_STRINGL
00e0: 28 73 2d 3e 76 61 6c 2c 73 2d 3e 6c 65 6e 2c 30  (s->val,s->len,0
00f0: 29 3b 0a 0a 73 74 61 74 69 63 20 7a 65 6e 64 5f  );..static zend_
0100: 61 6c 77 61 79 73 5f 69 6e 6c 69 6e 65 20 7a 65  always_inline ze
0110: 6e 64 5f 73 74 72 69 6e 67 20 2a 7a 65 6e 64 5f  nd_string *zend_
0120: 73 74 72 69 6e 67 5f 61 6c 6c 6f 63 28 69 6e 74  string_alloc(int
0130: 20 6c 65 6e 2c 20 69 6e 74 20 70 65 72 73 69 73   len, int persis
0140: 74 65 6e 74 29 0a 7b 0a 09 2f 2a 20 61 6c 69 67  tent).{../* alig
0150: 6e 65 64 20 74 6f 20 38 20 62 79 74 65 73 20 73  ned to 8 bytes s
0160: 69 7a 65 20 6f 66 20 62 75 66 66 65 72 20 74 6f  ize of buffer to
0170: 20 68 6f 6c 64 20 28 6c 65 6e 20 2b 20 31 29 20   hold (len + 1) 
0180: 63 68 61 72 61 63 74 65 72 73 20 2a 2f 0a 09 69  characters */..i
0190: 6e 74 20 61 6c 6c 69 67 6e 65 64 5f 73 69 7a 65  nt alligned_size
01a0: 20 3d 20 28 6c 65 6e 20 2b 20 31 20 2b 20 37 29   = (len + 1 + 7)
01b0: 20 26 20 7e 37 3b 0a 09 2f 2a 20 73 69 6e 67 6c   & ~7;../* singl
01c0: 65 20 61 6c 6c 6f 63 2c 20 73 6f 20 66 72 65 65  e alloc, so free
01d0: 20 74 68 65 20 62 75 66 2c 20 77 69 6c 6c 20 61   the buf, will a
01e0: 6c 73 6f 20 66 72 65 65 20 74 68 65 20 73 74 72  lso free the str
01f0: 75 63 74 20 2a 2f 0a 09 63 68 61 72 20 2a 62 75  uct */..char *bu
0200: 66 20 3d 20 73 61 66 65 5f 70 65 6d 61 6c 6c 6f  f = safe_pemallo
0210: 63 28 73 69 7a 65 6f 66 28 7a 65 6e 64 5f 73 74  c(sizeof(zend_st
0220: 72 69 6e 67 29 20 2b 20 61 6c 6c 69 67 6e 65 64  ring) + alligned
0230: 5f 73 69 7a 65 2c 20 31 2c 20 30 2c 20 70 65 72  _size, 1, 0, per
0240: 73 69 73 74 65 6e 74 29 3b 0a 09 7a 65 6e 64 5f  sistent);..zend_
0250: 73 74 72 69 6e 67 20 2a 73 74 72 20 3d 20 28 7a  string *str = (z
0260: 65 6e 64 5f 73 74 72 69 6e 67 20 2a 29 28 62 75  end_string *)(bu
0270: 66 20 2b 20 61 6c 6c 69 67 6e 65 64 5f 73 69 7a  f + alligned_siz
0280: 65 29 3b 0a 09 73 74 72 2d 3e 76 61 6c 20 3d 20  e);..str->val = 
0290: 62 75 66 3b 0a 09 73 74 72 2d 3e 6c 65 6e 20 3d  buf;..str->len =
02a0: 20 6c 65 6e 3b 0a 09 73 74 72 2d 3e 70 65 72 73   len;..str->pers
02b0: 69 73 74 65 6e 74 20 3d 20 70 65 72 73 69 73 74  istent = persist
02c0: 65 6e 74 3b 0a 09 72 65 74 75 72 6e 20 73 74 72  ent;..return str
02d0: 3b 0a 7d 0a 0a 2f 2a 20 63 6f 6d 70 61 74 69 62  ;.}../* compatib
02e0: 69 6c 69 74 79 20 6d 61 63 72 6f 73 20 2a 2f 0a  ility macros */.
02f0: 23 20 64 65 66 69 6e 65 20 5f 52 45 54 55 52 4e  # define _RETURN
0300: 5f 53 54 52 49 4e 47 28 73 74 72 29 20 52 45 54  _STRING(str) RET
0310: 55 52 4e 5f 53 54 52 49 4e 47 28 73 74 72 2c 20  URN_STRING(str, 
0320: 31 29 0a 23 20 64 65 66 69 6e 65 20 5f 52 45 54  1).# define _RET
0330: 55 52 4e 5f 53 54 52 49 4e 47 4c 28 73 74 72 2c  URN_STRINGL(str,
0340: 20 6c 29 20 52 45 54 55 52 4e 5f 53 54 52 49 4e   l) RETURN_STRIN
0350: 47 4c 28 73 74 72 2c 20 6c 2c 20 31 29 0a 74 79  GL(str, l, 1).ty
0360: 70 65 64 65 66 20 6c 6f 6e 67 20 7a 65 6e 64 5f  pedef long zend_
0370: 6c 6f 6e 67 3b 0a 74 79 70 65 64 65 66 20 69 6e  long;.typedef in
0380: 74 20 73 74 72 73 69 7a 65 5f 74 3b 0a 0a 23 65  t strsize_t;..#e
0390: 6c 73 65 0a 0a 23 20 64 65 66 69 6e 65 20 5f 52  lse..# define _R
03a0: 45 54 55 52 4e 5f 53 54 52 49 4e 47 28 73 74 72  ETURN_STRING(str
03b0: 29 20 52 45 54 55 52 4e 5f 53 54 52 49 4e 47 28  ) RETURN_STRING(
03c0: 73 74 72 29 0a 23 20 64 65 66 69 6e 65 20 5f 52  str).# define _R
03d0: 45 54 55 52 4e 5f 53 54 52 49 4e 47 4c 28 73 74  ETURN_STRINGL(st
03e0: 72 2c 20 6c 29 20 52 45 54 55 52 4e 5f 53 54 52  r, l) RETURN_STR
03f0: 49 4e 47 4c 28 73 74 72 2c 20 6c 29 0a 74 79 70  INGL(str, l).typ
0400: 65 64 65 66 20 73 69 7a 65 5f 74 20 73 74 72 73  edef size_t strs
0410: 69 7a 65 5f 74 3b 0a 0a 23 65 6e 64 69 66 0a 0a  ize_t;..#endif..
0420: 23 65 6e 64 69 66 20 2f 2a 20 50 48 50 5f 50 4f  #endif /* PHP_PO
0430: 52 54 41 42 4c 45 5f 48 20 2a 2f 0a              RTABLE_H */.