res_send: use a temp buffer if caller's buffer is under 512 bytes
[musl] / src / network / res_send.c
index ee4abf1..9593164 100644 (file)
@@ -1,8 +1,16 @@
 #include <resolv.h>
+#include <string.h>
 
 int __res_send(const unsigned char *msg, int msglen, unsigned char *answer, int anslen)
 {
-       int r = __res_msend(1, &msg, &msglen, &answer, &anslen, anslen);
+       int r;
+       if (anslen < 512) {
+               unsigned char buf[512];
+               r = __res_send(msg, msglen, buf, sizeof buf);
+               if (r >= 0) memcpy(answer, buf, r < anslen ? r : anslen);
+               return r;
+       }
+       r = __res_msend(1, &msg, &msglen, &answer, &anslen, anslen);
        return r<0 || !anslen ? -1 : anslen;
 }