mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-29 16:39:53 +02:00
handle signals at more places in brace expansion; fix for subshells changing terminal process group on signals
This commit is contained in:
@@ -23,23 +23,70 @@
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "builtins.h"
|
||||
#include "shell.h"
|
||||
#include "common.h"
|
||||
#include "bashgetopt.h"
|
||||
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
int
|
||||
sync_builtin (list)
|
||||
WORD_LIST *list;
|
||||
{
|
||||
sync();
|
||||
return (EXECUTION_SUCCESS);
|
||||
int fd, status;
|
||||
WORD_LIST *l;
|
||||
char *fn;
|
||||
|
||||
if (no_options (list))
|
||||
return (EX_USAGE);
|
||||
list = loptend;
|
||||
|
||||
if (list == 0)
|
||||
{
|
||||
sync();
|
||||
return (EXECUTION_SUCCESS);
|
||||
}
|
||||
|
||||
status = EXECUTION_SUCCESS;
|
||||
for (l = list; l; l = l->next)
|
||||
{
|
||||
fn = l->word->word;
|
||||
fd = open (fn, O_WRONLY);
|
||||
if (fd < 0)
|
||||
fd = open (fn, O_RDONLY);
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
file_error (fn);
|
||||
status = EXECUTION_FAILURE;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fsync (fd) < 0)
|
||||
{
|
||||
builtin_error ("%s: cannot sync: %s", fn, strerror (errno));
|
||||
status = EXECUTION_FAILURE;
|
||||
}
|
||||
close (fd);
|
||||
}
|
||||
|
||||
return (status);
|
||||
}
|
||||
|
||||
char *sync_doc[] = {
|
||||
"Sync disks.",
|
||||
""
|
||||
"Force completion of pending disk writes",
|
||||
"Sync disks or specified files.",
|
||||
"",
|
||||
"If one or more FILEs is supplied, force completion of pending writes",
|
||||
"to those files. Otherwise, force completion of any pending disk",
|
||||
"writes.",
|
||||
"",
|
||||
"Exit Status: zero unless any FILE could not be synced.",
|
||||
(char *)NULL
|
||||
};
|
||||
|
||||
@@ -48,6 +95,6 @@ struct builtin sync_struct = {
|
||||
sync_builtin, /* function implementing the builtin */
|
||||
BUILTIN_ENABLED, /* initial flags for builtin */
|
||||
sync_doc, /* array of long documentation strings. */
|
||||
"sync", /* usage synopsis; becomes short_doc */
|
||||
"sync [file ...]", /* usage synopsis; becomes short_doc */
|
||||
0 /* reserved for internal use */
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user