#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define RSRC_DATA_SIZE      256
#define NUM_SOURCE_FILES    12000
#define ITERATION_LIMIT     1000000

static char g_basedir[1024];
static char g_src[NUM_SOURCE_FILES][1024];
static char g_src_rsrc[NUM_SOURCE_FILES][1024];

static void fill_pattern(void *buf, size_t len, unsigned char seed)
{
  unsigned char *p = (unsigned char*) buf;
  for (size_t i = 0; i &lt; len; i++)
    p[i] = (unsigned char)(seed + (i &amp; 0xff));
}

static void create_source_files(void)
{
  char *data = (char*) malloc(RSRC_DATA_SIZE);
  if (!data) { perror(&#34;malloc&#34;); exit(1); }
  
  for (int i = 0; i &lt; NUM_SOURCE_FILES; i++) {
    snprintf(g_src[i], sizeof(g_src[i]),
             &#34;%s/source_%d&#34;, g_basedir, i);
    snprintf(g_src_rsrc[i], sizeof(g_src_rsrc[i]),
             &#34;%s/source_%d/..namedfork/rsrc&#34;, g_basedir, i);

    int fd = open(g_src[i], O_CREAT | O_WRONLY | O_TRUNC, 0644);
    if (fd &lt; 0) { perror(&#34;open src&#34;); exit(1); }
    fill_pattern(data, 8192, &#39;D&#39; + i);
    write(fd, data, 8192);
    close(fd);

    fd = open(g_src_rsrc[i], O_CREAT | O_WRONLY | O_TRUNC, 0644);
    if (fd &gt;= 0) {
      fill_pattern(data, RSRC_DATA_SIZE, &#39;R&#39; + i);
      write(fd, data, RSRC_DATA_SIZE);
      close(fd);
    } else {
      fill_pattern(data, RSRC_DATA_SIZE, &#39;R&#39; + i);
      if (setxattr(g_src[i], &#34;com.apple.ResourceFork&#34;,
                   data, RSRC_DATA_SIZE, 0, 0) != 0) {
        perror(&#34;setxattr ResourceFork&#34;);
        exit(1);
      }
    }

    printf(&#34;  [+] source_%d  data=8KB  rsrc=%dKB\n&#34;, i, RSRC_DATA_SIZE / 1024);
  }
  
  free(data);
}

static void *rsrc_write_worker(void *arg)
{
  int id = (int)(long)arg;
  char buf[8192];
  long n = 0;
  
  fill_pattern(buf, sizeof(buf), &#39;W&#39; + id);
  
  while (n &lt; ITERATION_LIMIT) {
    int file_idx = n % NUM_SOURCE_FILES;
    int fd = open(g_src_rsrc[file_idx], O_WRONLY | O_CREAT, 0644);
    if (fd &gt;= 0) {
      off_t off = ((n * 4096) % RSRC_DATA_SIZE);
      pwrite(fd, buf, sizeof(buf), off);
      if ((n &amp; 0x7) == 0)
        fsync(fd);
      
      close(fd);
    }
    /* Fallback: xattr write (always goes through the namedstream path) */
    else {
      setxattr(g_src[file_idx], &#34;com.apple.ResourceFork&#34;,
               buf, sizeof(buf), 0, 0);
    }
    
    n++;
  }
  printf(&#34;[rsrc_wr_%d] done (%ld ops)\n&#34;, id, n);
  return NULL;
}

static void cleanup_files(void)
{
  printf(&#34;[*] Cleaning up files...\n&#34;);
  for (int i = 0; i &lt; NUM_SOURCE_FILES; i++) {
    unlink(g_src[i]);
    if ((i % 1000) == 0 &amp;&amp; i &gt; 0)
      printf(&#34;  [+] removed %d files\n&#34;, i);
  }
  char cmd[1100];
  snprintf(cmd, sizeof(cmd), &#34;rm -f %s/clone_* %s/fclone_* %s/cross_* 2&gt;/dev/null&#34;, g_basedir, g_basedir, g_basedir);
  system(cmd);
  printf(&#34;[*] Cleanup complete.\n&#34;);
}

int main(int argc, char *argv[])
{
  if (argc &lt; 2) {
    fprintf(stderr, &#34;Usage: %s \n&#34;, argv[0]);
    return 1;
  }
  
  strncpy(g_basedir, argv[1], sizeof(g_basedir) - 1);
  for (int i = 0; i &lt; NUM_SOURCE_FILES; i++) {
    snprintf(g_src[i], sizeof(g_src[i]), &#34;%s/source_%d&#34;, g_basedir, i);
    snprintf(g_src_rsrc[i], sizeof(g_src_rsrc[i]), &#34;%s/source_%d/..namedfork/rsrc&#34;, g_basedir, i);
  }
  
  cleanup_files();
  while (1)
  {
    {
      mkdir(g_basedir, 0755);
      printf(&#34;[*] Creating source files...\n&#34;);
      create_source_files();
      printf(&#34;\n[*] File creation complete.\n&#34;);
    }

    {
      printf(&#34;[*] Starting tests...\n&#34;);
      pthread_t tids[1];
      int tc = 0;
      pthread_create(&amp;tids[tc++], NULL, rsrc_write_worker,  (void *)(long)0);
      
      for (int i = 0; i &lt; tc; i++)
        pthread_join(tids[i], NULL);

      printf(&#34;[*] Tests done...\n&#34;);
    }
    
    {
      printf(&#34;[*] Cleaning up files...\n&#34;);
      cleanup_files();
      printf(&#34;\n[*] File cleanup complete.\n&#34;);
    }
  }

  return 0;
}
