Borut Razem borut.razem@siol.net writes:
+static void msvcrt_add_handle(MSVCRT_FILE *fp, HANDLE *hProcess) +{
- LOCK_POPEN;
- if (fp2handle == NULL)
- {
- /* array not allocated yet: allocate it */
- if ((fp2handle = MSVCRT_malloc(sizeof (struct fp2handle_s) * 16)) != NULL)
- {
/* write handles to the first slot */fp2handle[0].fp = fp;fp2handle[0].hProcess = hProcess;/* zero the remaining space */memset(&fp2handle[1], 0, sizeof (struct fp2handle_s) * (16 - 1));/* update the number of slots */fp2handle_entries = 16;- }
- }
- else
- {
- int i;
- /* search for free or slot with the same fp */
- for (i = 0; i < fp2handle_entries; ++i)
- {
if (fp2handle[i].fp == NULL || fp2handle[i].fp == fp){/* found: write handles to the slot */fp2handle[i].fp = fp;fp2handle[i].hProcess = hProcess;break;}- }
- if (i >= fp2handle_entries)
- {
/* no space left: double the array size */struct fp2handle_s *newFp2handle;if ((newFp2handle = MSVCRT_realloc(fp2handle, sizeof (struct fp2handle_s) * (fp2handle_entries * 2))) != NULL){fp2handle = newFp2handle;/* write handles to the first exetended slot */fp2handle[fp2handle_entries].fp = fp;fp2handle[fp2handle_entries].hProcess = hProcess;/* zero the remaining extended space */memset(&fp2handle[fp2handle_entries + 1], 0, sizeof (struct fp2handle_s) * (fp2handle_entries - 1));/* update the number of slots */fp2handle_entries *= 2;}- }
- }
- UNLOCK_POPEN;
+}
That's an awful lot of code for such a simple thing. You probably want to use an array indexed by file descriptor or something like that. Also please don't add a comment before every line stating what the line does, that should be clear from the code itself.