/* We don't care about data.tar.* or debian-binary, just control.tar.* */
#ifdef CONFIG_FEATURE_DEB_TAR_GZ
- llist_add_to(&(ar_handle->accept), "control.tar.gz");
+ llist_add_to(&(ar_handle->accept), (char*)"control.tar.gz");
#endif
#ifdef CONFIG_FEATURE_DEB_TAR_BZ2
- llist_add_to(&(ar_handle->accept), "control.tar.bz2");
+ llist_add_to(&(ar_handle->accept), (char*)"control.tar.bz2");
#endif
/* Assign the tar handle as a subarchive of the ar handle */
/* We don't care about control.tar.* or debian-binary, just data.tar.* */
#ifdef CONFIG_FEATURE_DEB_TAR_GZ
- llist_add_to(&(ar_handle->accept), "data.tar.gz");
+ llist_add_to(&(ar_handle->accept), (char*)"data.tar.gz");
#endif
#ifdef CONFIG_FEATURE_DEB_TAR_BZ2
- llist_add_to(&(ar_handle->accept), "data.tar.bz2");
+ llist_add_to(&(ar_handle->accept), (char*)"data.tar.bz2");
#endif
/* Assign the tar handle as a subarchive of the ar handle */
archive_handle = init_archive_deb_ar(deb_file->filename);
init_archive_deb_data(archive_handle);
archive_handle->sub_archive->action_data = data_extract_all_prefix;
- archive_handle->sub_archive->buffer = "/";
+ archive_handle->sub_archive->buffer = (char*)"/"; /* huh? */
archive_handle->sub_archive->flags |= ARCHIVE_EXTRACT_UNCONDITIONAL;
unpack_ar_archive(archive_handle);
llist_t *control_list = NULL;
/* Extract the control file */
- llist_add_to(&control_list, "./control");
+ llist_add_to(&control_list, (char*)"./control");
archive_handle = init_archive_deb_ar(argv[0]);
init_archive_deb_control(archive_handle);
deb_file[deb_count]->control_file = deb_extract_control_file_to_buffer(archive_handle, control_list);
archive_handle_t *tar_archive;
llist_t *control_tar_llist = NULL;
unsigned opt;
- char *extract_dir = NULL;
+ const char *extract_dir = NULL;
short argcount = 1;
/* Setup the tar archive handle */
ar_archive->filter = filter_accept_list_reassign;
#ifdef CONFIG_FEATURE_DEB_TAR_GZ
- llist_add_to(&(ar_archive->accept), "data.tar.gz");
- llist_add_to(&control_tar_llist, "control.tar.gz");
+ llist_add_to(&(ar_archive->accept), (char*)"data.tar.gz");
+ llist_add_to(&control_tar_llist, (char*)"control.tar.gz");
#endif
#ifdef CONFIG_FEATURE_DEB_TAR_BZ2
- llist_add_to(&(ar_archive->accept), "data.tar.bz2");
- llist_add_to(&control_tar_llist, "control.tar.bz2");
+ llist_add_to(&(ar_archive->accept), (char*)"data.tar.bz2");
+ llist_add_to(&control_tar_llist, (char*)"control.tar.bz2");
#endif
opt_complementary = "?c--efXx:e--cfXx:f--ceXx:X--cefx:x--cefX";
* it should accept a second argument which specifies a
* specific field to print */
ar_archive->accept = control_tar_llist;
- llist_add_to(&(tar_archive->accept), "./control");
+ llist_add_to(&(tar_archive->accept), (char*)"./control");
tar_archive->filter = filter_accept_list;
tar_archive->action_data = data_extract_to_stdout;
}
/* strdup, replacing "\n" with '\n', and "\delimiter" with 'delimiter' */
-static void parse_escapes(char *dest, char *string, int len, char from, char to)
+static void parse_escapes(char *dest, const char *string, int len, char from, char to)
{
int i = 0;
*dest = 0;
}
-static char *copy_parsing_escapes(char *string, int len)
+static char *copy_parsing_escapes(const char *string, int len)
{
char *dest = xmalloc(len + 1);
* expression delimiter (typically a forward * slash ('/')) not preceded by
* a backslash ('\'). A negative delimiter disables square bracket checking.
*/
-static int index_of_next_unescaped_regexp_delim(int delimiter, char *str)
+static int index_of_next_unescaped_regexp_delim(int delimiter, const char *str)
{
int bracket = -1;
int escaped = 0;
/*
* returns the index in the string just past where the address ends.
*/
-static int get_address(char *my_str, int *linenum, regex_t ** regex)
+static int get_address(const char *my_str, int *linenum, regex_t ** regex)
{
- char *pos = my_str;
+ const char *pos = my_str;
if (isdigit(*my_str)) {
- *linenum = strtol(my_str, &pos, 10);
+ *linenum = strtol(my_str, (char**)&pos, 10);
/* endstr shouldnt ever equal NULL */
} else if (*my_str == '$') {
*linenum = -1;
{
int cflags = bbg.regex_type;
char *match;
- int idx = 0;
+ int idx;
/*
* A substitution command should look something like this:
/* Parse address+command sets, skipping comment lines. */
-static void add_cmd(char *cmdstr)
+static void add_cmd(const char *cmdstr)
{
sed_cmd_t *sed_cmd;
int temp;
/* Append this line to any unfinished line from last time. */
if (bbg.add_cmd_line) {
- cmdstr = xasprintf("%s\n%s", bbg.add_cmd_line, cmdstr);
+ char *tp = xasprintf("%s\n%s", bbg.add_cmd_line, cmdstr);
free(bbg.add_cmd_line);
- bbg.add_cmd_line = cmdstr;
+ bbg.add_cmd_line = tp;
}
/* If this line ends with backslash, request next line. */
argv += optind;
if (!argc) {
/* default behavior is to echo all the filenames */
- *argv = "echo";
+ *argv = (char*)"echo";
argc++;
}
/* this helper yells "short read!" if param is not -1 */
extern void complain_copyfd_and_die(off_t sz) ATTRIBUTE_NORETURN;
extern char bb_process_escape_sequence(const char **ptr);
+/* TODO: sometimes modifies its parameter, which
+ * makes it rather inconvenient at times: */
extern char *bb_get_last_path_component(char *path);
extern int ndelay_on(int fd);
extern int ndelay_off(int fd);
*/
#include "busybox.h"
-#include <unistd.h>
-#include <stdlib.h>
#ifdef USE_TTY_GROUP
#define S_IWGRP_OR_S_IWOTH S_IWGRP
int mesg_main(int argc, char *argv[])
{
struct stat sb;
- char *tty;
+ const char *tty;
char c = 0;
- if ((--argc == 0)
- || ((argc == 1) && (((c = **++argv) == 'y') || (c == 'n')))) {
- if ((tty = ttyname(STDERR_FILENO)) == NULL) {
+ if (--argc == 0
+ || (argc == 1 && ((c = **++argv) == 'y' || c == 'n'))
+ ) {
+ tty = ttyname(STDERR_FILENO);
+ if (tty == NULL) {
tty = "ttyname";
} else if (stat(tty, &sb) == 0) {
+ mode_t m;
if (argc == 0) {
- puts(((sb.st_mode & (S_IWGRP | S_IWOTH)) ==
- 0) ? "is n" : "is y");
+ puts((sb.st_mode & (S_IWGRP|S_IWOTH)) ? "is y" : "is n");
return EXIT_SUCCESS;
}
- if (chmod
- (tty,
- (c ==
- 'y') ? sb.st_mode | (S_IWGRP_OR_S_IWOTH) : sb.
- st_mode & ~(S_IWGRP | S_IWOTH)) == 0) {
+ m = (c == 'y') ? sb.st_mode | S_IWGRP_OR_S_IWOTH
+ : sb.st_mode & ~(S_IWGRP|S_IWOTH);
+ if (chmod(tty, m) == 0) {
return EXIT_SUCCESS;
}
}
}
}
-static void do_skip(char *fname, int statok)
+static void do_skip(const char *fname, int statok)
{
struct stat sbuf;
if (*first == '/') {
last = first;
}
- last[1] = 0;
+ last[1] = '\0';
return first;
}
/* Why static? */
static int failed;
pid_t pid;
- char *prog;
+ const char *prog;
// Be nice to nommu machines.
failed = 0;
// Fifth char is always '\0'
void smart_ulltoa5(unsigned long long ul, char buf[5])
{
- char *fmt;
+ const char *fmt;
char c;
unsigned v,idx = 0;
ul *= 10;
int eject_main(int argc, char **argv)
{
unsigned long flags;
- char *device;
+ const char *device;
int dev, cmd;
opt_complementary = "?:?1:t--T:T--t";
static void print_flag_on_off(unsigned long get_arg, const char *s, unsigned long arg)
{
-
- if (get_arg)
- {
+ if (get_arg) {
printf(" setting %s to %ld", s, arg);
on_off(arg);
}
{
if (ioctl(fd, request, &argp) != 0)
bb_perror_msg(" %s", string);
- else
- {
+ else {
printf(" %s\t= %2ld", str, (unsigned long) argp);
on_off((unsigned long) argp);
}
#ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY
static void print_ascii(uint16_t *p, uint8_t length);
-static void xprint_ascii(uint16_t *val ,int i, char * string, int n)
+static void xprint_ascii(uint16_t *val ,int i, const char *string, int n)
{
- if (val[i])
- {
- printf("\t%-20s",string);
+ if (val[i]) {
+ printf("\t%-20s", string);
print_ascii(&val[i], n);
}
}
#endif
-/* end of busybox specific stuff */
+/* end of busybox specific stuff */
#ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY
static uint8_t mode_loop(uint16_t mode_sup, uint16_t mode_sel, int cc, uint8_t *have_mode)
}
#endif /* HDIO_DRIVE_CMD */
-static void print_flag(unsigned long flag, char *s, unsigned long value)
+static void print_flag(unsigned long flag, const char *s, unsigned long value)
{
if (flag)
printf(" setting %s to %ld\n", s, value);
FILE *file = stdin;
char *string;
const char *fmt = "%s: ";
- char *n_arg = "4";
+ const char *n_arg = "4";
opt = getopt32(argc, argv, "afon:", &n_arg);
/* -a is our default behaviour */
#if defined(USE_GOT_ENTRIES) || defined(USE_PLT_ENTRIES)
-static struct obj_section *arch_xsect_init(struct obj_file *f, char *name,
+static struct obj_section *arch_xsect_init(struct obj_file *f, const char *name,
int offset, int size)
{
struct obj_section *myrelsec = obj_find_section(f, name);
printf(" %s", tok);
tok = strtok(NULL, "\n");
if (!tok)
- tok = "";
+ tok = (char*)"";
/* New-style has commas, or -. If so,
truncate (other fields might follow). */
else if (strchr(tok, ',')) {
if (tok[strlen(tok)-1] == ',')
tok[strlen(tok)-1] = '\0';
} else if (tok[0] == '-'
- && (tok[1] == '\0' || isspace(tok[1])))
- tok = "";
- printf(" %s", tok);
+ && (tok[1] == '\0' || isspace(tok[1]))
+ ) {
+ tok = (char*)"";
+ }
+ printf(" %s", tok);
}
puts("");
free(line);
int arping_main(int argc, char **argv)
{
- char *device = "eth0";
+ const char *device = "eth0";
int ifindex;
char *source = NULL;
char *target;
#include <getopt.h>
typedef struct ftp_host_info_s {
- char *user;
- char *password;
+ const char *user;
+ const char *password;
struct len_and_sockaddr *lsa;
} ftp_host_info_t;
static struct servent *sp;
static uid_t uid;
-static char *CONFIG = _PATH_INETDCONF;
+static const char *CONFIG = _PATH_INETDCONF;
static FILE *fconfig;
static char line[1024];
exit(-1);
}
-int matches(char *cmd, char *pattern)
+int matches(const char *cmd, const char *pattern)
{
int len = strlen(cmd);
#define AF_DECnet 12
#endif
-struct dn_naddr
-{
+struct dn_naddr {
unsigned short a_len;
unsigned char a_addr[DN_MAXADDL];
};
void invarg(const char * const, const char * const) ATTRIBUTE_NORETURN;
void duparg(char *, char *) ATTRIBUTE_NORETURN;
void duparg2(char *, char *) ATTRIBUTE_NORETURN;
-int matches(char *arg, char *pattern);
+int matches(const char *arg, const char *pattern);
extern int inet_addr_match(inet_prefix *a, inet_prefix *b, int bits);
const char *dnet_ntop(int af, const void *addr, char *str, size_t len);
#define SO_WAITDATA (1<<17) /* wait data to read */
#define SO_NOSPACE (1<<18) /* no space to write */
-static char *get_sname(int port, const char *proto, int num)
+static const char *get_sname(int port, const char *proto, int num)
{
- char *str = itoa(ntohs(port));
+ /* hummm, we return static buffer here!! */
+ const char *str = itoa(ntohs(port));
if (!num) {
struct servent *se = getservbyport(port, proto);
if (se)
return str;
}
-static void snprint_ip_port(char *ip_port, int size, struct sockaddr *addr, int port, char *proto, int numeric)
+static void snprint_ip_port(char *ip_port, int size, struct sockaddr *addr, int port, const char *proto, int numeric)
{
- char *port_name;
+ const char *port_name;
#if ENABLE_FEATURE_IPV6
if (addr->sa_family == AF_INET6) {
static void udp_do_one(int lnr, const char *line)
{
char local_addr[64], rem_addr[64];
- char *state_str, more[512];
+ const char *state_str;
+ char more[512];
int num, local_port, rem_port, d, state, timer_run, uid, timeout;
#if ENABLE_FEATURE_IPV6
struct sockaddr_in6 localaddr, remaddr;
{
static int has = 0;
char path[PATH_MAX], ss_flags[32];
- char *ss_proto, *ss_state, *ss_type;
+ const char *ss_proto, *ss_state, *ss_type;
int num, state, type, inode;
void *d;
unsigned long refcnt, proto, unix_flags;
#ifdef RTF_REJECT
if ((rt.rt_flags & RTF_REJECT) && !rt.rt_dev) {
- rt.rt_dev = "lo";
+ rt.rt_dev = (char*)"lo";
}
#endif
static void putiac_subopt_autologin(void)
{
int len = strlen(autologin) + 6; // (2 + 1 + 1 + strlen + 2)
- char *user = "USER";
+ const char *user = "USER";
if (G.iaclen + len > IACBUFSIZE)
iacflush();
int udhcp_sp_fd_set(fd_set *rfds, int extra_fd);
int udhcp_sp_read(fd_set *rfds);
int raw_socket(int ifindex);
-int read_interface(char *interface, int *ifindex, uint32_t *addr, uint8_t *arp);
-int listen_socket(uint32_t ip, int port, char *inf);
+int read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t *arp);
+int listen_socket(uint32_t ip, int port, const char *inf);
int pidfile_acquire(const char *pidfile);
void pidfile_write_release(int pid_fd);
int arpping(uint32_t yiaddr, uint32_t ip, uint8_t *arp, char *interface);
char release_on_quit; /* perform release on quit */
char abort_if_no_lease; /* Abort if no lease */
char background_if_no_lease; /* Fork to background if no lease */
- char *interface; /* The name of the interface to use */
+ const char *interface; /* The name of the interface to use */
char *pidfile; /* Optionally store the process ID */
- char *script; /* User script to run at dhcp events */
+ const char *script; /* User script to run at dhcp events */
uint8_t *clientid; /* Optional client id to use */
uint8_t *vendorclass; /* Optional vendor class-id to use */
uint8_t *hostname; /* Optional hostname to use */
}
-static int sprintip(char *dest, char *pre, uint8_t *ip)
+static int sprintip(char *dest, const char *pre, const uint8_t *ip)
{
return sprintf(dest, "%s%d.%d.%d.%d", pre, ip[0], ip[1], ip[2], ip[3]);
}
#include "common.h"
-int read_interface(char *interface, int *ifindex, uint32_t *addr, uint8_t *arp)
+int read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t *arp)
{
int fd;
struct ifreq ifr;
}
-int listen_socket(uint32_t ip, int port, char *inf)
+int listen_socket(uint32_t ip, int port, const char *inf)
{
struct ifreq interface;
int fd;
static void parse_url(char *url, struct host_info *h);
static FILE *open_socket(len_and_sockaddr *lsa);
static char *gethdr(char *buf, size_t bufsiz, FILE *fp, int *istrunc);
-static int ftpcmd(char *s1, char *s2, FILE *fp, char *buf);
+static int ftpcmd(const char *s1, const char *s2, FILE *fp, char *buf);
/* Globals (can be accessed from signal handlers */
static off_t content_len; /* Content-length of the file */
static int chunked; /* chunked transfer encoding */
#if ENABLE_FEATURE_WGET_STATUSBAR
static void progressmeter(int flag);
-static char *curfile; /* Name of current file being transferred */
+static const char *curfile; /* Name of current file being transferred */
static struct timeval start; /* Time a transfer started */
enum {
STALLTIME = 5 /* Seconds when xfer considered "stalled" */
// Dirty hack. Needed because bb_get_last_path_component
// will destroy trailing / by storing '\0' in last byte!
if (!last_char_is(target.path, '/')) {
- fname_out =
+ fname_out = bb_get_last_path_component(target.path);
#if ENABLE_FEATURE_WGET_STATUSBAR
- curfile =
+ curfile = fname_out;
#endif
- bb_get_last_path_component(target.path);
}
if (!fname_out || !fname_out[0]) {
- fname_out =
+ /* bb_get_last_path_component writes
+ * to last '/' only. We don't have one here... */
+ fname_out = (char*)"index.html";
#if ENABLE_FEATURE_WGET_STATUSBAR
- curfile =
+ curfile = fname_out;
#endif
- "index.html";
}
if (dir_prefix != NULL)
fname_out = concat_path_file(dir_prefix, fname_out);
return hdrval;
}
-static int ftpcmd(char *s1, char *s2, FILE *fp, char *buf)
+static int ftpcmd(const char *s1, const char *s2, FILE *fp, char *buf)
{
int result;
if (s1) {
#endif
#define final_printf debug_printf
-static void __syntax(char *file, int line) {
+static void __syntax(const char *file, int line)
+{
bb_error_msg("syntax error %s:%d", file, line);
}
// NB: was __FILE__, but that produces full path sometimess, so...
static int newenv(int f);
static void quitenv(void);
-static void err(char *s);
-static int anys(char *s1, char *s2);
-static int any(int c, char *s);
+static void err(const char *s);
+static int anys(const char *s1, const char *s2);
+static int any(int c, const char *s);
static void next(int f);
static void setdash(void);
static void onecommand(void);
*/
static void leave(void); /* abort shell (or fail in subshell) */
static void fail(void); /* fail but return to process next command */
-static void warn(char *s);
+static void warn(const char *s);
static void sig(int i); /* default signal handler */
/* NOTREACHED */
}
-static void warn(char *s)
+static void warn(const char *s)
{
if (*s) {
prs(s);
leave();
}
-static void err(char *s)
+static void err(const char *s)
{
warn(s);
if (flag['n'])
}
/*
- * Is any character from s1 in s2?
+ * Is character c in s?
*/
-static int anys(char *s1, char *s2)
+static int any(int c, const char *s)
{
- while (*s1)
- if (any(*s1++, s2))
+ while (*s)
+ if (*s++ == c)
return 1;
return 0;
}
/*
- * Is character c in s?
+ * Is any character from s1 in s2?
*/
-static int any(int c, char *s)
+static int anys(const char *s1, const char *s2)
{
- while (*s)
- if (*s++ == c)
+ while (*s1)
+ if (any(*s1++, s2))
return 1;
return 0;
}
{
struct fb_var_screeninfo var, varset;
int fh, i;
- char *fbdev = DEFAULTFBDEV;
- char *modefile = DEFAULTFBMODE;
+ const char *fbdev = DEFAULTFBDEV;
+ const char *modefile = DEFAULTFBMODE;
char *thisarg, *mode = NULL;
memset(&varset, 0xFF, sizeof(varset));
}
if (ENABLE_FEATURE_MDEV_EXEC && field == 3) {
// Command to run
- char *s = "@$*", *s2;
+ const char *s = "@$*";
+ const char *s2;
s2 = strchr(s, *pos++);
if (!s2) {
// Force error
// Recursively delete contents of rootfs.
-static void delete_contents(char *directory)
+static void delete_contents(const char *directory)
{
DIR *dir;
struct dirent *d;