<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def eat_config(self, conf_file=None):
 """ Read the the conf_file and update this instance accordingly. conf_file: str or Falseish If conf_file is Falseish, look in the directory where self.filename sits if self is not already associated with a conf_file. If associated, and conf_file arg is Falseish, read self.conf_file. If conf_file arg is a file name, read from that file, but do not update self.conf_file accordingly. An Implicit IOError is raised if no conf_file was found. See spit_config for documentation on the file layout. .. note:: Updates the mask if not no_auto. .. note:: If the config_file exist because of an earlier spit, and custom channel names was not available, channels are listed as the fallback names in the file. Then after this eat, self.chnames will be set to the list in the conf_file section 'channels'. The result can be that self.chnames and self.chnames_0 will be equal. The message then is that, if channel names are updated, you should spit before you eat. """


        chroot = os.path.dirname(self.filename)  # "channels root dir"
        chroot = os.path.abspath(chroot)

        # Figure out file name of conf_file:
        if hasattr(self, 'conf_file') and not conf_file:
            cfgfn = self.conf_file
        elif conf_file:
            cfgfn = conf_file
        else:
            cfgfn = os.path.join(chroot, CONFIG_FILE)

        with open(cfgfn, 'r') as fo:
            self.conconf.eat_config(fo)

        # Update mask:
        if not self.no_auto:
            self.make_mask()
        else:
            self.make_mask(dry=True)