/* link */
// XXX: FIXME: this is broken. Why not just use argv[0] ?
- busybox = xreadlink("/proc/self/exe");
+ busybox = xmalloc_readlink_or_warn("/proc/self/exe");
if (!busybox)
return 1;
install_links(busybox, use_symbolic_links);
tbInfo->hlInfo->name, 0);
#endif
} else if (S_ISLNK(statbuf->st_mode)) {
- char *lpath = xreadlink(fileName);
- if (!lpath) /* Already printed err msg inside xreadlink() */
+ char *lpath = xmalloc_readlink_or_warn(fileName);
+ if (!lpath)
return FALSE;
header.typeflag = SYMTYPE;
strncpy(header.linkname, lpath, sizeof(header.linkname));
break;
case LIST_SYMLINK:
if (S_ISLNK(dn->dstat.st_mode)) {
- char *lpath = xreadlink(dn->fullname);
+ char *lpath = xmalloc_readlink_or_warn(dn->fullname);
if (!lpath) break;
printf(" -> ");
#if ENABLE_FEATURE_LS_FILETYPES || ENABLE_FEATURE_LS_COLOR
{
char *buf;
- if ((buf = xgetcwd(NULL)) != NULL) {
+ buf = xrealloc_getcwd_or_warn(NULL);
+ if (buf != NULL) {
puts(buf);
fflush_stdout_and_exit(EXIT_SUCCESS);
}
case 'N':
strncat(pformat, "s", buf_len);
if (S_ISLNK(statbuf->st_mode)) {
- char *linkname = xreadlink(filename);
+ char *linkname = xmalloc_readlink_or_warn(filename);
if (linkname == NULL) {
bb_perror_msg("cannot read symbolic link '%s'", filename);
return;
pw_ent = getpwuid(statbuf.st_uid);
if (S_ISLNK(statbuf.st_mode))
- linkname = xreadlink(filename);
+ linkname = xmalloc_readlink_or_warn(filename);
if (linkname)
printf(" File: \"%s\" -> \"%s\"\n", filename, linkname);
else
if (opt) {
buf = realpath(fname, bb_common_bufsiz1);
} else {
- buf = xreadlink(fname);
+ buf = xmalloc_readlink_or_warn(fname);
}
if (!buf)
extern DIR *xopendir(const char *path);
extern DIR *warn_opendir(const char *path);
-char *xgetcwd(char *cwd);
-char *xreadlink(const char *path);
+char *xrealloc_getcwd_or_warn(char *cwd);
+char *xmalloc_readlink_or_warn(const char *path);
char *xmalloc_realpath(const char *path);
extern void xstat(const char *filename, struct stat *buf);
extern pid_t spawn(char **argv);
} else if (S_ISLNK(source_stat.st_mode)) {
char *lpath;
- lpath = xreadlink(source);
+ lpath = xmalloc_readlink_or_warn(source);
if (symlink(lpath, dest) < 0) {
bb_perror_msg("cannot create symlink '%s'", dest);
free(lpath);
size_t cur_prmt_len = 0;
char flg_not_length = '[';
char *prmt_mem_ptr = xzalloc(1);
- char *pwd_buf = xgetcwd(0);
+ char *pwd_buf = xrealloc_getcwd_or_warn(NULL);
char buf2[PATH_MAX + 1];
char buf[2];
char c;
if (path[0] == '/')
start = xstrdup(path);
else {
- s = xgetcwd(NULL);
+ s = xrealloc_getcwd_or_warn(NULL);
start = concat_path_file(s, path);
free(s);
}
*/
char *
-xgetcwd(char *cwd)
+xrealloc_getcwd_or_warn(char *cwd)
{
char *ret;
unsigned path_max;
path_max = (unsigned) PATH_MAX;
path_max += 2; /* The getcwd docs say to do this. */
- if (cwd==0)
+ if (cwd == NULL)
cwd = xmalloc(path_max);
while ((ret = getcwd(cwd, path_max)) == NULL && errno == ERANGE) {
* yourself. You have been warned.
*/
-char *xreadlink(const char *path)
+char *xmalloc_readlink_or_warn(const char *path)
{
enum { GROWBY = 80 }; /* how large we will grow strings by */
static const char *set_cwd(void)
{
if (cwd == bb_msg_unknown)
- cwd = NULL; /* xgetcwd(arg) called free(arg) */
- cwd = xgetcwd((char *)cwd);
+ cwd = NULL; /* xrealloc_getcwd_or_warn(arg) called free(arg) */
+ cwd = xrealloc_getcwd_or_warn((char *)cwd);
if (!cwd)
cwd = bb_msg_unknown;
return cwd;
bb_perror_msg("cd: %s", newdir);
return EXIT_FAILURE;
}
- cwd = xgetcwd((char *)cwd);
+ cwd = xrealloc_getcwd_or_warn((char *)cwd);
if (!cwd)
cwd = bb_msg_unknown;
return EXIT_SUCCESS;
/* built-in 'pwd' handler */
static int builtin_pwd(struct child_prog ATTRIBUTE_UNUSED *dummy)
{
- cwd = xgetcwd((char *)cwd);
+ cwd = xrealloc_getcwd_or_warn((char *)cwd);
if (!cwd)
cwd = bb_msg_unknown;
puts(cwd);
}
/* initialize the cwd -- this is never freed...*/
- cwd = xgetcwd(0);
+ cwd = xrealloc_getcwd_or_warn(NULL);
if (!cwd)
cwd = bb_msg_unknown;
#define DEBUG 0
-/* Path to the unix socket */
-static const char *dev_log_name;
-
/* Path for the file where all log messages are written */
static const char *logFilePath = "/var/log/messages";
static int logFD = -1;
{
timestamp_and_log(LOG_SYSLOG | LOG_INFO, (char*)"syslogd exiting", 0);
puts("syslogd exiting");
- unlink(dev_log_name);
if (ENABLE_FEATURE_IPC_SYSLOG)
ipcsyslog_cleanup();
exit(1);
static void do_syslogd(void)
{
struct sockaddr_un sunx;
- socklen_t addr_len;
int sock_fd;
fd_set fds;
+ char *dev_log_name;
/* Set up signal handlers */
signal(SIGINT, quit_signal);
signal(SIGALRM, do_mark);
alarm(markInterval);
- dev_log_name = xmalloc_realpath(_PATH_LOG);
- if (!dev_log_name)
- dev_log_name = _PATH_LOG;
-
- /* Unlink old /dev/log (or object it points to) */
- unlink(dev_log_name);
-
memset(&sunx, 0, sizeof(sunx));
sunx.sun_family = AF_UNIX;
- strncpy(sunx.sun_path, dev_log_name, sizeof(sunx.sun_path));
+ strcpy(sunx.sun_path, "/dev/log");
+
+ /* Unlink old /dev/log or object it points to. */
+ /* (if it exists, bind will fail) */
+ logmode = LOGMODE_NONE;
+ dev_log_name = xmalloc_readlink_or_warn("/dev/log");
+ logmode = LOGMODE_STDIO;
+ if (dev_log_name) {
+ int fd = xopen(".", O_NONBLOCK);
+ xchdir("/dev");
+ /* we do not check whether this is a link also */
+ unlink(dev_log_name);
+ fchdir(fd);
+ close(fd);
+ safe_strncpy(sunx.sun_path, dev_log_name, sizeof(sunx.sun_path));
+ free(dev_log_name);
+ } else {
+ unlink("/dev/log");
+ }
+
sock_fd = xsocket(AF_UNIX, SOCK_DGRAM, 0);
- addr_len = sizeof(sunx.sun_family) + strlen(sunx.sun_path);
- xbind(sock_fd, (struct sockaddr *) &sunx, addr_len);
+ xbind(sock_fd, (struct sockaddr *) &sunx, sizeof(sunx));
- if (chmod(dev_log_name, 0666) < 0) {
- bb_perror_msg_and_die("cannot set permission on %s", dev_log_name);
+ if (chmod("/dev/log", 0666) < 0) {
+ bb_perror_msg_and_die("cannot set permission on /dev/log");
}
if (ENABLE_FEATURE_IPC_SYSLOG && (option_mask32 & OPT_circularlog)) {
ipcsyslog_init();