#include <resolv.h>
#include <string.h>
#include <time.h>

#include "libc.h"

int __res_mkquery(int op, const char* dname, int class, int type, const unsigned char* data,
                  int datalen, const unsigned char* newrr, unsigned char* buf, int buflen) {
  int id, i, j;
  unsigned char q[280];
  struct timespec ts;
  size_t l = strnlen(dname, 255);
  int n;

  if (l && dname[l - 1] == '.')
    l--;
  n = 17 + l + !!l;
  if (l > 253 || buflen < n || op > 15u || class > 255u || type > 255u)
    return -1;

  /* Construct query template - ID will be filled later */
  memset(q, 0, n);
  q[2] = op * 8 + 1;
  q[5] = 1;
  memcpy((char*)q + 13, dname, l);
  for (i = 13; q[i]; i = j + 1) {
    for (j = i; q[j] && q[j] != '.'; j++)
      ;
    if (j - i - 1u > 62u)
      return -1;
    q[i - 1] = j - i;
  }
  q[i + 1] = type;
  q[i + 3] = class;

  /* Make a reasonably unpredictable id */
  clock_gettime(CLOCK_REALTIME, &ts);
  id = (ts.tv_nsec + ts.tv_nsec / 65536UL) & 0xffff;
  q[0] = id / 256;
  q[1] = id;

  memcpy(buf, q, n);
  return n;
}

weak_alias(__res_mkquery, res_mkquery);
