mirror of
https://github.com/sheumann/hush.git
synced 2024-12-22 14:30:31 +00:00
dc: use common_bufsiz1 for evaluation stack
msh: fix "underscore bug" (a_b=1111 didn't work) dnsd: openlog(), so that applet's name is logged
This commit is contained in:
parent
b5b45a91f0
commit
5b27fbe990
@ -4,22 +4,19 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
/* Tiny RPN calculator, because "expr" didn't give me bitwise operations. */
|
/* Tiny RPN calculator, because "expr" didn't give me bitwise operations. */
|
||||||
|
|
||||||
static double stack[100];
|
enum { STACK_SIZE = sizeof(bb_common_bufsiz1) / sizeof(double) };
|
||||||
|
|
||||||
|
#define stack ((double*)&bb_common_bufsiz1)
|
||||||
static unsigned int pointer;
|
static unsigned int pointer;
|
||||||
static unsigned char base;
|
static unsigned char base;
|
||||||
|
|
||||||
static void push(double a)
|
static void push(double a)
|
||||||
{
|
{
|
||||||
if (pointer >= (sizeof(stack) / sizeof(*stack)))
|
if (pointer >= STACK_SIZE)
|
||||||
bb_error_msg_and_die("stack overflow");
|
bb_error_msg_and_die("stack overflow");
|
||||||
stack[pointer++] = a;
|
stack[pointer++] = a;
|
||||||
}
|
}
|
||||||
@ -91,10 +88,10 @@ static void not(void)
|
|||||||
|
|
||||||
static void set_output_base(void)
|
static void set_output_base(void)
|
||||||
{
|
{
|
||||||
base=(unsigned char)pop();
|
base = (unsigned char)pop();
|
||||||
if ((base != 10) && (base != 16)) {
|
if ((base != 10) && (base != 16)) {
|
||||||
fprintf(stderr, "Error: base = %d is not supported.\n", base);
|
bb_error_msg("error, base %d is not supported", base);
|
||||||
base=10;
|
base = 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +105,7 @@ static void print_base(double print)
|
|||||||
|
|
||||||
static void print_stack_no_pop(void)
|
static void print_stack_no_pop(void)
|
||||||
{
|
{
|
||||||
unsigned int i=pointer;
|
unsigned int i = pointer;
|
||||||
while (i)
|
while (i)
|
||||||
print_base(stack[--i]);
|
print_base(stack[--i]);
|
||||||
}
|
}
|
||||||
@ -119,7 +116,7 @@ static void print_no_pop(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct op {
|
struct op {
|
||||||
const char *name;
|
const char name[4];
|
||||||
void (*function) (void);
|
void (*function) (void);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -145,7 +142,7 @@ static const struct op operators[] = {
|
|||||||
{"p", print_no_pop},
|
{"p", print_no_pop},
|
||||||
{"f", print_stack_no_pop},
|
{"f", print_stack_no_pop},
|
||||||
{"o", set_output_base},
|
{"o", set_output_base},
|
||||||
{0, 0}
|
{"", 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void stack_machine(const char *argument)
|
static void stack_machine(const char *argument)
|
||||||
@ -164,9 +161,9 @@ static void stack_machine(const char *argument)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (o->name != 0) {
|
while (o->name[0]) {
|
||||||
if (strcmp(o->name, argument) == 0) {
|
if (strcmp(o->name, argument) == 0) {
|
||||||
(*(o->function)) ();
|
o->function();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
o++;
|
o++;
|
||||||
@ -185,7 +182,9 @@ static char *get_token(char **buffer)
|
|||||||
current = skip_whitespace(*buffer);
|
current = skip_whitespace(*buffer);
|
||||||
if (*current != 0) {
|
if (*current != 0) {
|
||||||
start = current;
|
start = current;
|
||||||
while (!isspace(*current) && *current != 0) { current++; }
|
while (!isspace(*current) && *current != 0) {
|
||||||
|
current++;
|
||||||
|
}
|
||||||
*buffer = current;
|
*buffer = current;
|
||||||
}
|
}
|
||||||
return start;
|
return start;
|
||||||
@ -220,7 +219,7 @@ int dc_main(int argc, char **argv)
|
|||||||
free(line);
|
free(line);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (*argv[1]=='-')
|
if (*argv[1] == '-')
|
||||||
bb_show_usage();
|
bb_show_usage();
|
||||||
while (argc >= 2) {
|
while (argc >= 2) {
|
||||||
stack_machine(argv[1]);
|
stack_machine(argv[1]);
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
* the first porting of oao' scdns to busybox also.
|
* the first porting of oao' scdns to busybox also.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <syslog.h>
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
|
|
||||||
//#define DEBUG 1
|
//#define DEBUG 1
|
||||||
@ -114,7 +115,6 @@ static void undot(uint8_t * rip)
|
|||||||
* Presently the dot is copied into name without
|
* Presently the dot is copied into name without
|
||||||
* converting to a length/string substring for that label.
|
* converting to a length/string substring for that label.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int getfileentry(FILE * fp, struct dns_entry *s)
|
static int getfileentry(FILE * fp, struct dns_entry *s)
|
||||||
{
|
{
|
||||||
unsigned int a,b,c,d;
|
unsigned int a,b,c,d;
|
||||||
@ -359,6 +359,7 @@ int dnsd_main(int argc, char **argv)
|
|||||||
#else
|
#else
|
||||||
xdaemon(1, 0);
|
xdaemon(1, 0);
|
||||||
#endif
|
#endif
|
||||||
|
openlog(applet_name, LOG_PID, LOG_DAEMON);
|
||||||
logmode = LOGMODE_SYSLOG;
|
logmode = LOGMODE_SYSLOG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
shell/msh.c
17
shell/msh.c
@ -1191,23 +1191,22 @@ static int isassign(const char *s)
|
|||||||
unsigned char c;
|
unsigned char c;
|
||||||
DBGPRINTF7(("ISASSIGN: enter, s=%s\n", s));
|
DBGPRINTF7(("ISASSIGN: enter, s=%s\n", s));
|
||||||
|
|
||||||
/* no isalpha() - we shouldn't use locale */
|
|
||||||
c = *s;
|
c = *s;
|
||||||
if (c != '_'
|
/* no isalpha() - we shouldn't use locale */
|
||||||
&& (unsigned)((c|0x20) - 'a') > 25 /* not letter */
|
/* c | 0x20 - lowercase (Latin) letters */
|
||||||
) {
|
if (c != '_' && (unsigned)((c|0x20) - 'a') > 25)
|
||||||
|
/* not letter */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
while (1) {
|
while (1) {
|
||||||
c = *++s;
|
c = *++s;
|
||||||
if (c == '\0')
|
|
||||||
return 0;
|
|
||||||
if (c == '=')
|
if (c == '=')
|
||||||
return 1;
|
return 1;
|
||||||
c |= 0x20; /* lowercase letters, doesn't affect numbers */
|
if (c == '\0')
|
||||||
|
return 0;
|
||||||
if (c != '_'
|
if (c != '_'
|
||||||
&& (unsigned)(c - '0') > 9 /* not number */
|
&& (unsigned)(c - '0') > 9 /* not number */
|
||||||
&& (unsigned)(c - 'a') > 25 /* not letter */
|
&& (unsigned)((c|0x20) - 'a') > 25 /* not letter */
|
||||||
) {
|
) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user