+/*
+====================
+FS_AddFileToPack
+
+Add a file to the list of files contained into a package
+====================
+*/
+static packfile_t* FS_AddFileToPack (const char* name, pack_t* pack,
+ size_t offset, size_t packsize,
+ size_t realsize, file_flags_t flags)
+{
+ int (*strcmp_funct) (const char* str1, const char* str2);
+ size_t left, right, middle;
+ int diff;
+ packfile_t *file;
+
+ strcmp_funct = pack->ignorecase ? strcasecmp : strcmp;
+
+ // Look for the slot we should put that file into (binary search)
+ left = 0;
+ right = pack->numfiles;
+ while (left != right)
+ {
+ middle = (left + right - 1) / 2;
+ diff = strcmp_funct (pack->files[middle].name, name);
+
+ // If we found the file, there's a problem
+ if (!diff)
+ Sys_Error ("Package %s contains several time the file %s\n",
+ pack->filename, name);
+
+ // If we're too far in the list
+ if (diff > 0)
+ right = middle;
+ else
+ left = middle + 1;
+ }
+
+ // We have to move the right of the list by one slot to free the one we need
+ file = &pack->files[left];
+ memmove (file + 1, file, (pack->numfiles - left) * sizeof (*file));
+ pack->numfiles++;
+
+ strlcpy (file->name, name, sizeof (file->name));
+ file->offset = offset;
+ file->packsize = packsize;
+ file->realsize = realsize;
+ file->flags = flags;
+
+ return file;
+}
+
+