e70152e44cc66cc599ff6b699eb8adc07f3e656a
kent
  Sat May 24 21:09:34 2014 -0700
Adding Copyright NNNN Regents of the University of California to all files I believe with reasonable certainty were developed under UCSC employ or as part of Genome Browser copyright assignment.
diff --git src/utils/combineFiles/combineFiles.c src/utils/combineFiles/combineFiles.c
index 486a29a..0cbb98e 100644
--- src/utils/combineFiles/combineFiles.c
+++ src/utils/combineFiles/combineFiles.c
@@ -1,117 +1,120 @@
 /* combineFiles - combine small files into files of a certain size. */
+
+/* Copyright (C) 2004 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
 #include "sys/types.h"
 #include "sys/stat.h"
 #include "dirent.h"
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "combineFiles - combine small files into files of a certain size\n"
   "usage:\n"
   "   combineFiles dir maxSize\n"
   "options:\n"
   "   -xxx=XXX\n"
   );
 }
 
 static struct optionSpec options[] = {
    {NULL, 0},
 };
 
 struct file
 {
     struct file *next;
     char *name;
     int  size;
 };
 
 int sizeCmp(const void *va, const void *vb)
 {
 const struct file *a = *((struct file **)va);
 const struct file *b = *((struct file **)vb);
 
 return b->size - a->size;
 }
 
 void append(char *dest, char *src)
 {
 FILE *f1 = mustOpen(dest, "a");
 FILE *f2 = mustOpen(src, "r");
 char buffer[BUFSIZ];
 int num;
 
 while (num = fread(buffer, 1, sizeof(buffer), f2))
     fwrite(buffer, 1, num, f1);
 
 fclose(f1);
 fclose(f2);
 }
 
 void combineFiles(char *directory, int size)
 /* combineFiles - combine small files into files of a certain size. */
 {
 DIR *dir;
 struct file *file = NULL;
 struct file *fileList = NULL;
 struct dirent *dirent;
 
 chdir(directory);
 dir = opendir(".");
 while ((dirent = readdir(dir)) != NULL)
     {
     struct stat statBuf;
     stat(dirent->d_name, &statBuf);
 
     if (S_ISREG(statBuf.st_mode))
 	{
 	AllocVar(file);
 	file->name = cloneString(dirent->d_name);
 	file->size = statBuf.st_size;
 
 	slAddHead(&fileList, file);
 	}
     }
 
 slSort(&fileList, sizeCmp);
 for(file=fileList; file; file = file->next)
     {
     if (file->size <= size)
 	{
 	struct file *file2;
 	struct file *prev = file;
 
 	for(file2=file->next; file2; file2 = file2->next)
 	    {
 	    if (file->size + file2->size <= size)
 		{
 		append(file->name, file2->name);
 		unlink(file2->name);
 		file->size += file2->size;
 		file->next = file2->next;
 		}
 	    else
 		break;
 	    }
 	}
     }
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 int size;
 
 optionInit(&argc, argv, options);
 if (argc != 3)
     usage();
 size = atoi(argv[2]);
 if ((size < 0) || (size > 1024*1024*1024))
     errAbort("size must be between 0 and %d\n",1024*1024*1024);
 combineFiles(argv[1], size);
 return 0;
 }