+--- ./gen_uuid_c 2023-04-06 18:59:49.376261216 -0600
++++ ./gen_uuid.c 2023-04-06 17:57:00.987526837 -0600
+@@ -216,7 +216,7 @@
+ for (i = 0; i < n; i+= ifreq_size(*ifrp) ) {
+ ifrp = (struct ifreq *)((char *) ifc.ifc_buf+i);
+ strncpy(ifr.ifr_name, ifrp->ifr_name, IFNAMSIZ);
+-#ifdef SIOCGIFHWADDR
++#if defined(SIOCGIFHWADDR) && !defined(__sun)
+ if (ioctl(sd, SIOCGIFHWADDR, &ifr) < 0)
+ continue;
+ a = (unsigned char *) &ifr.ifr_hwaddr.sa_data;
+@@ -271,11 +271,16 @@
+ THREAD_LOCAL int state_fd = -2;
+ THREAD_LOCAL FILE *state_f;
+ THREAD_LOCAL uint16_t clock_seq;
++ struct flock lock;
+ struct timeval tv;
+ uint64_t clock_reg;
+ mode_t save_umask;
+ int len;
+ int ret = 0;
++
++lock.l_whence = SEEK_SET;
++lock.l_start = 0;
++lock.l_len = 0;
+
+ if (state_fd == -2) {
+ save_umask = umask(0);
+@@ -294,7 +299,8 @@
+ }
+ if (state_fd >= 0) {
+ rewind(state_f);
+- while (flock(state_fd, LOCK_EX) < 0) {
++ lock.l_type = F_WRLCK;
++ while (fcntl(state_fd, F_SETLKW, &lock) < 0) {
+ if ((errno == EAGAIN) || (errno == EINTR))
+ continue;
+ fclose(state_f);
+@@ -366,7 +372,8 @@
+ fflush(state_f);
+ }
+ rewind(state_f);
+- flock(state_fd, LOCK_UN);
++ lock.l_type = F_UNLCK;
++ fcntl(state_fd, F_SETLK, &lock);
+ }
+
+ *clock_high = clock_reg >> 32;