more const, use bb_getopt_ulflags, insert XXX for show place of problems
This commit is contained in:
parent
485d7cbdf1
commit
86ac072b44
@ -60,7 +60,7 @@
|
||||
#define TFTP_ERROR 5
|
||||
#define TFTP_OACK 6
|
||||
|
||||
static const char *tftp_bb_error_msg[] = {
|
||||
static const char * const tftp_bb_error_msg[] = {
|
||||
"Undefined error",
|
||||
"File not found",
|
||||
"Access violation",
|
||||
@ -71,8 +71,17 @@ static const char *tftp_bb_error_msg[] = {
|
||||
"No such user"
|
||||
};
|
||||
|
||||
static const int tftp_cmd_get = 1;
|
||||
static const int tftp_cmd_put = 2;
|
||||
#ifdef CONFIG_FEATURE_TFTP_GET
|
||||
# define tftp_cmd_get 1
|
||||
#else
|
||||
# define tftp_cmd_get 0
|
||||
#endif
|
||||
#ifdef CONFIG_FEATURE_TFTP_PUT
|
||||
# define tftp_cmd_put (tftp_cmd_get+1)
|
||||
#else
|
||||
# define tftp_cmd_put 0
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef CONFIG_FEATURE_TFTP_BLOCKSIZE
|
||||
|
||||
@ -375,7 +384,7 @@ static inline int tftp(const int cmd, const struct hostent *host,
|
||||
#endif
|
||||
|
||||
if (opcode == TFTP_ERROR) {
|
||||
char *msg = NULL;
|
||||
const char *msg = NULL;
|
||||
|
||||
if (buf[4] != '\0') {
|
||||
msg = &buf[4];
|
||||
@ -383,7 +392,7 @@ static inline int tftp(const int cmd, const struct hostent *host,
|
||||
} else if (tmp < (sizeof(tftp_bb_error_msg)
|
||||
/ sizeof(char *))) {
|
||||
|
||||
msg = (char *) tftp_bb_error_msg[tmp];
|
||||
msg = tftp_bb_error_msg[tmp];
|
||||
}
|
||||
|
||||
if (msg) {
|
||||
@ -509,71 +518,75 @@ int tftp_main(int argc, char **argv)
|
||||
/* figure out what to pass to getopt */
|
||||
|
||||
#ifdef CONFIG_FEATURE_TFTP_BLOCKSIZE
|
||||
char *sblocksize = NULL;
|
||||
#define BS "b:"
|
||||
#define BS_ARG , &sblocksize
|
||||
#else
|
||||
#define BS
|
||||
#define BS_ARG
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FEATURE_TFTP_GET
|
||||
#define GET "g"
|
||||
#define GET_COMPL ":g"
|
||||
#else
|
||||
#define GET
|
||||
#define GET_COMP
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FEATURE_TFTP_PUT
|
||||
#define PUT "p"
|
||||
#define PUT_COMPL ":p"
|
||||
#else
|
||||
#define PUT
|
||||
#define PUT_COMPL
|
||||
#endif
|
||||
|
||||
while ((opt = getopt(argc, argv, BS GET PUT "l:r:")) != -1) {
|
||||
switch (opt) {
|
||||
#if defined(CONFIG_FEATURE_TFTP_GET) && defined(CONFIG_FEATURE_TFTP_PUT)
|
||||
bb_opt_complementally = GET_COMPL PUT_COMPL ":?g--p:p--g";
|
||||
#elif defined(CONFIG_FEATURE_TFTP_GET) || defined(CONFIG_FEATURE_TFTP_PUT)
|
||||
bb_opt_complementally = GET_COMPL PUT_COMPL;
|
||||
#else
|
||||
/* XXX: may be should #error ? */
|
||||
#endif
|
||||
|
||||
|
||||
opt = bb_getopt_ulflags(argc, argv, GET PUT "l:r:" BS,
|
||||
&localfile, &remotefile BS_ARG);
|
||||
#ifdef CONFIG_FEATURE_TFTP_BLOCKSIZE
|
||||
case 'b':
|
||||
blocksize = atoi(optarg);
|
||||
if (!tftp_blocksize_check(blocksize, 0)) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_FEATURE_TFTP_GET
|
||||
case 'g':
|
||||
cmd = tftp_cmd_get;
|
||||
flags = O_WRONLY | O_CREAT | O_TRUNC;
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_FEATURE_TFTP_PUT
|
||||
case 'p':
|
||||
cmd = tftp_cmd_put;
|
||||
flags = O_RDONLY;
|
||||
break;
|
||||
#endif
|
||||
case 'l':
|
||||
localfile = optarg;
|
||||
break;
|
||||
case 'r':
|
||||
remotefile = optarg;
|
||||
break;
|
||||
if(sblocksize) {
|
||||
blocksize = atoi(sblocksize);
|
||||
if (!tftp_blocksize_check(blocksize, 0)) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
cmd &= (tftp_cmd_get & tftp_cmd_put);
|
||||
#ifdef CONFIG_FEATURE_TFTP_GET
|
||||
if(cmd == tftp_cmd_get)
|
||||
flags = O_WRONLY | O_CREAT | O_TRUNC;
|
||||
#endif
|
||||
#ifdef CONFIG_FEATURE_TFTP_PUT
|
||||
if(cmd == tftp_cmd_put)
|
||||
flags = O_RDONLY;
|
||||
#endif
|
||||
|
||||
if ((cmd == 0) || (optind == argc)) {
|
||||
bb_show_usage();
|
||||
}
|
||||
if(localfile && strcmp(localfile, "-") == 0) {
|
||||
fd = fileno((cmd==tftp_cmd_get)? stdout : stdin);
|
||||
}
|
||||
if(localfile == NULL)
|
||||
localfile = remotefile;
|
||||
if(remotefile == NULL)
|
||||
remotefile = localfile;
|
||||
if (fd==-1) {
|
||||
/* XXX: I corrected this, but may be wrong too. vodz */
|
||||
if(localfile==NULL || strcmp(localfile, "-") == 0) {
|
||||
fd = fileno((cmd==tftp_cmd_get)? stdout : stdin);
|
||||
} else if (fd==-1) {
|
||||
fd = open(localfile, flags, 0644);
|
||||
}
|
||||
if (fd < 0) {
|
||||
bb_perror_msg_and_die("local file");
|
||||
}
|
||||
|
||||
/* XXX: argv[optind] and/or argv[optind + 1] may be NULL! */
|
||||
host = xgethostbyname(argv[optind]);
|
||||
port = bb_lookup_port(argv[optind + 1], "udp", 69);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user