| 52 | return *p == '/'; |
| 53 | } |
| 54 | static void extract_attr(const char *ts, const char *te, const char *attr, char *out, size_t sz) { |
| 55 | out[0] = '\0'; |
| 56 | size_t an = strlen(attr); |
| 57 | for (const char *p = ts; p < te - an; p++) { |
| 58 | if (memcmp(p, attr, an) == 0 && p[an] == '=') { |
| 59 | p += an + 1; |
| 60 | char q = *p; |
| 61 | if (q != '"' && q != '\'') |
| 62 | return; |
| 63 | p++; |
| 64 | const char *v = p; |
| 65 | while (p < te && *p != q) |
| 66 | p++; |
| 67 | size_t vl = (size_t)(p - v); |
| 68 | if (vl >= sz) |
| 69 | vl = sz - 1; |
| 70 | memcpy(out, v, vl); |
| 71 | out[vl] = '\0'; |
| 72 | return; |
| 73 | } |
| 74 | } |
| 75 | } |
| 76 | static const char *elem_content(const char *p, const char *end, const char *tag, char *buf, |
| 77 | size_t bufsz) { |
| 78 | buf[0] = '\0'; |
no outgoing calls
no test coverage detected