Clear the chain of indev, closing file handles.
| 148 | |
| 149 | // Clear the chain of indev, closing file handles. |
| 150 | void InputDevices::clear(FILE* fpointer) |
| 151 | { |
| 152 | while (m_head) |
| 153 | { |
| 154 | FILE* const p = m_head->indev_fpointer; |
| 155 | if (fpointer && p == fpointer) |
| 156 | break; |
| 157 | |
| 158 | if (p != stdin && p != m_ofp.indev_fpointer) |
| 159 | fclose(p); |
| 160 | indev* const flist = m_head->indev_next; |
| 161 | delete m_head; |
| 162 | m_head = flist; |
| 163 | --m_count; |
| 164 | } |
| 165 | if (m_ifp.indev_fpointer && // In case we called clear(NULL) manually before. |
| 166 | m_ifp.indev_fpointer != stdin && m_ifp.indev_fpointer != m_ofp.indev_fpointer) |
| 167 | { |
| 168 | fclose(m_ifp.indev_fpointer); |
| 169 | m_ifp.indev_fpointer = 0; |
| 170 | } |
| 171 | |
| 172 | fb_assert(m_count == 0 || fpointer != 0); |
| 173 | if (!fpointer) |
| 174 | { |
| 175 | m_head = 0; |
| 176 | m_count = 0; |
| 177 | } |
| 178 | } |
| 179 | |
| 180 | // Insert an indev in the chain, always in LIFO way. |
| 181 | bool InputDevices::insert(FILE* fp, const char* name, const char* display) |
no test coverage detected