rem: if (parentContext->fds[i]) {
add: if (parentContext->fds[i] && (parentContext->fds[i]->open_mode & O_CLOEXEC) == 0) {
context: vfs_new_io_context(void *_parentContext){	size_t table_size;	struct io_context *context;	struct io_context *parentContext;	context = kmalloc(sizeof(struct io_context));	if (context == NULL)		return NULL;	memset(context, 0, sizeof(struct io_context));	parentContext = (struct io_context *)_parentContext;	if (parentContext)		table_size = parentContext->table_size;	else		table_size = DEFAULT_FD_TABLE_SIZE;	context->fds = kmalloc(sizeof(struct file_descriptor *) * table_size);	if (context->fds == NULL) {		kfree(context);		return NULL;	}	memset(context->fds, 0, sizeof(struct file_descriptor *) * table_size);	if (mutex_init(&context->io_mutex, "I/O context") < 0) {		kfree(context->fds);		kfree(context);		return NULL;	}	/*	 * copy parent files	 */	if (parentContext) {		size_t i;		mutex_lock(&parentContext->io_mutex);		context->cwd = parentContext->cwd;		if (context->cwd)			inc_vnode_ref_count(context->cwd);		for (i = 0; i < table_size; i++) {			if (parentContext->fds[i]) {				context->fds[i] = parentContext->fds[i];				atomic_add(&context->fds[i]->ref_count, 1);			}		}		mutex_unlock(&parentContext->io_mutex);	} else {		context->cwd = gRoot;		if (context->cwd)			inc_vnode_ref_count(context->cwd);	}	context->table_size = table_size;	return context;}