2009-10-01 Colin Watson <cjwatson@ubuntu.com>
* util/grub-editenv.c (create_envblk_file): Write new block with a .new suffix and then rename it into place, to ensure atomic creation.
This commit is contained in:
parent
0e51c3a7d4
commit
50dcabcf94
2 changed files with 15 additions and 3 deletions
|
@ -1,3 +1,9 @@
|
|||
2009-10-01 Colin Watson <cjwatson@ubuntu.com>
|
||||
|
||||
* util/grub-editenv.c (create_envblk_file): Write new block with a
|
||||
.new suffix and then rename it into place, to ensure atomic
|
||||
creation.
|
||||
|
||||
2009-09-28 Robert Millan <rmh.grub@aybabtu.com>
|
||||
|
||||
Do not automatically install headers.
|
||||
|
|
|
@ -95,25 +95,31 @@ create_envblk_file (const char *name)
|
|||
{
|
||||
FILE *fp;
|
||||
char *buf;
|
||||
char *namenew;
|
||||
|
||||
buf = malloc (DEFAULT_ENVBLK_SIZE);
|
||||
if (! buf)
|
||||
grub_util_error ("out of memory");
|
||||
|
||||
fp = fopen (name, "wb");
|
||||
asprintf (&namenew, "%s.new", name);
|
||||
fp = fopen (namenew, "wb");
|
||||
if (! fp)
|
||||
grub_util_error ("cannot open the file %s", name);
|
||||
grub_util_error ("cannot open the file %s", namenew);
|
||||
|
||||
memcpy (buf, GRUB_ENVBLK_SIGNATURE, sizeof (GRUB_ENVBLK_SIGNATURE) - 1);
|
||||
memset (buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1, '#',
|
||||
DEFAULT_ENVBLK_SIZE - sizeof (GRUB_ENVBLK_SIGNATURE) + 1);
|
||||
|
||||
if (fwrite (buf, 1, DEFAULT_ENVBLK_SIZE, fp) != DEFAULT_ENVBLK_SIZE)
|
||||
grub_util_error ("cannot write to the file %s", name);
|
||||
grub_util_error ("cannot write to the file %s", namenew);
|
||||
|
||||
fsync (fileno (fp));
|
||||
free (buf);
|
||||
fclose (fp);
|
||||
|
||||
if (rename (namenew, name) < 0)
|
||||
grub_util_error ("cannot rename the file %s to %s", namenew, name);
|
||||
free (namenew);
|
||||
}
|
||||
|
||||
static grub_envblk_t
|
||||
|
|
Loading…
Reference in a new issue