/* main.c - the normal mode main routine */ /* * VasEBoot -- GRand Unified Bootloader * Copyright (C) 2000,2001,2002,2003,2005,2006,2007,2008,2009,2013 Free Software Foundation, Inc. * * VasEBoot is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * VasEBoot is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with VasEBoot. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* Read a line from the file FILE. */ char * VasEBoot_file_getline (VasEBoot_file_t file) { char c; VasEBoot_size_t pos = 0; char *cmdline; int have_newline = 0; VasEBoot_size_t max_len = 64; /* Initially locate some space. */ cmdline = VasEBoot_malloc (max_len); if (! cmdline) return 0; while (1) { if (VasEBoot_file_read (file, &c, 1) != 1) break; /* Skip all carriage returns. */ if (c == '\r') continue; if (pos + 1 >= max_len) { char *old_cmdline = cmdline; max_len = max_len * 2; cmdline = VasEBoot_realloc (cmdline, max_len); if (! cmdline) { VasEBoot_free (old_cmdline); return 0; } } if (c == '\n') { have_newline = 1; break; } cmdline[pos++] = c; } cmdline[pos] = '\0'; /* If the buffer is empty, don't return anything at all. */ if (pos == 0 && !have_newline) { VasEBoot_free (cmdline); cmdline = 0; } return cmdline; }