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>
|
2009-09-28 Robert Millan <rmh.grub@aybabtu.com>
|
||||||
|
|
||||||
Do not automatically install headers.
|
Do not automatically install headers.
|
||||||
|
|
|
@ -95,25 +95,31 @@ create_envblk_file (const char *name)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
char *namenew;
|
||||||
|
|
||||||
buf = malloc (DEFAULT_ENVBLK_SIZE);
|
buf = malloc (DEFAULT_ENVBLK_SIZE);
|
||||||
if (! buf)
|
if (! buf)
|
||||||
grub_util_error ("out of memory");
|
grub_util_error ("out of memory");
|
||||||
|
|
||||||
fp = fopen (name, "wb");
|
asprintf (&namenew, "%s.new", name);
|
||||||
|
fp = fopen (namenew, "wb");
|
||||||
if (! fp)
|
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);
|
memcpy (buf, GRUB_ENVBLK_SIGNATURE, sizeof (GRUB_ENVBLK_SIGNATURE) - 1);
|
||||||
memset (buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1, '#',
|
memset (buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1, '#',
|
||||||
DEFAULT_ENVBLK_SIZE - sizeof (GRUB_ENVBLK_SIGNATURE) + 1);
|
DEFAULT_ENVBLK_SIZE - sizeof (GRUB_ENVBLK_SIGNATURE) + 1);
|
||||||
|
|
||||||
if (fwrite (buf, 1, DEFAULT_ENVBLK_SIZE, fp) != DEFAULT_ENVBLK_SIZE)
|
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));
|
fsync (fileno (fp));
|
||||||
free (buf);
|
free (buf);
|
||||||
fclose (fp);
|
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
|
static grub_envblk_t
|
||||||
|
|
Loading…
Reference in a new issue