Anyone?

On Fri, Jul 04, 2014 at 07:41:07PM +0200, Tobias Stoeckmann wrote:
> On Sun, Jun 29, 2014 at 08:40:53PM +0200, Tobias Stoeckmann wrote:
> > "cc -c" works for zaurus' cmd.c.  I don't have a zaurus, so it would be
> > nice if a zaurus owner can test these changes.
> 
> Got feedback from zaurus users.  The Makefile was missing another change:
> It still listed cmd.c in SRCS.  Compiles for them and nobody shouted at
> me for removing "clear".
> 
> Patch updated, I also incremented zboot to 2.10, after all this diff
> will zap the "clear" command.
> 
> Okay?
> 
> Index: arch/zaurus/stand/zboot/Makefile
> ===================================================================
> RCS file: /cvs/src/sys/arch/zaurus/stand/zboot/Makefile,v
> retrieving revision 1.13
> diff -u -p -r1.13 Makefile
> --- arch/zaurus/stand/zboot/Makefile  10 Sep 2013 21:00:26 -0000      1.13
> +++ arch/zaurus/stand/zboot/Makefile  4 Jul 2014 17:39:53 -0000
> @@ -21,7 +21,7 @@ CLEANFILES+= arm machine
>  .endif
>  
>  # stand/boot
> -SRCS+=       boot.c vars.c bootarg.c conf.c
> +SRCS+=       boot.c cmd.c vars.c bootarg.c conf.c
>  
>  # libsa
>  SRCS+=       close.c closeall.c cons.c ctime.c disklabel.c dkcksum.c fstat.c 
> \
> @@ -33,7 +33,7 @@ SRCS+=      strcmp.c strlcpy.c strlen.c strnc
>       ashrdi3.c divsi3.S divdi3.c moddi3.c qdivrem.c
>  
>  # local overrides and additions
> -SRCS+=       alloc.c cmd.c devopen.c diskprobe.c exec.c exit.c loadfile.c \
> +SRCS+=       alloc.c devopen.c diskprobe.c exec.c exit.c loadfile.c \
>       machdep.c termios.c unixcons.c unixdev.c unixsys.S
>  
>  .PATH:       ${S}/stand/boot
> Index: arch/zaurus/stand/zboot/boot.8
> ===================================================================
> RCS file: /cvs/src/sys/arch/zaurus/stand/zboot/boot.8,v
> retrieving revision 1.10
> diff -u -p -r1.10 boot.8
> --- arch/zaurus/stand/zboot/boot.8    27 Sep 2012 12:26:28 -0000      1.10
> +++ arch/zaurus/stand/zboot/boot.8    4 Jul 2014 17:39:53 -0000
> @@ -103,6 +103,12 @@ This file may contain any commands
>  .Nm
>  accepts at the interactive prompt.
>  Though default settings usually suffice, they can be changed here.
> +.\" XXX CHECK_SKIP_CONF is not defined...
> +.\" .Pp
> +.\" .Pa boot.conf
> +.\" processing can be skipped by holding down either Control key as
> +.\" .Nm
> +.\" starts.
>  .It
>  The header line
>  .Pp
> Index: arch/zaurus/stand/zboot/cmd.c
> ===================================================================
> RCS file: arch/zaurus/stand/zboot/cmd.c
> diff -N arch/zaurus/stand/zboot/cmd.c
> --- arch/zaurus/stand/zboot/cmd.c     21 Mar 2007 03:29:05 -0000      1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,532 +0,0 @@
> -/*   $OpenBSD: cmd.c,v 1.3 2007/03/21 03:29:05 tedu Exp $    */
> -
> -/*
> - * Copyright (c) 1997-1999 Michael Shalayeff
> - * All rights reserved.
> - *
> - * Redistribution and use in source and binary forms, with or without
> - * modification, are permitted provided that the following conditions
> - * are met:
> - * 1. Redistributions of source code must retain the above copyright
> - *    notice, this list of conditions and the following disclaimer.
> - * 2. Redistributions in binary form must reproduce the above copyright
> - *    notice, this list of conditions and the following disclaimer in the
> - *    documentation and/or other materials provided with the distribution.
> - *
> - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
> - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
> - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> - * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
> - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> - * SUCH DAMAGE.
> - */
> -
> -#include <sys/param.h>
> -#include <sys/reboot.h>
> -
> -#ifdef REGRESS
> -#include <sys/stat.h>
> -#include <errno.h>
> -#else
> -#include <libsa.h>
> -#include <lib/libkern/funcs.h>
> -#endif
> -
> -#include <stand/boot/cmd.h>
> -
> -#define CTRL(c)      ((c)&0x1f)
> -
> -static int Xboot(void);
> -static int Xclear(void);
> -static int Xecho(void);
> -static int Xhelp(void);
> -static int Xls(void);
> -static int Xnop(void);
> -static int Xreboot(void);
> -static int Xstty(void);
> -static int Xtime(void);
> -#ifdef MACHINE_CMD
> -static int Xmachine(void);
> -extern const struct cmd_table MACHINE_CMD[];
> -#endif
> -extern int Xset(void);
> -extern int Xenv(void);
> -
> -extern const struct cmd_table cmd_set[];
> -const struct cmd_table cmd_table[] = {
> -     {"#",      CMDT_CMD, Xnop},  /* XXX must be first */
> -     {"boot",   CMDT_CMD, Xboot},
> -     {"clear",  CMDT_CMD, Xclear},
> -     {"echo",   CMDT_CMD, Xecho},
> -     {"env",    CMDT_CMD, Xenv},
> -     {"help",   CMDT_CMD, Xhelp},
> -     {"ls",     CMDT_CMD, Xls},
> -#ifdef MACHINE_CMD
> -     {"machine",CMDT_MDC, Xmachine},
> -#endif
> -     {"reboot", CMDT_CMD, Xreboot},
> -     {"set",    CMDT_SET, Xset},
> -     {"stty",   CMDT_CMD, Xstty},
> -     {"time",   CMDT_CMD, Xtime},
> -     {NULL, 0},
> -};
> -
> -static void ls(char *, struct stat *);
> -static int readline(char *, size_t, int);
> -char *nextword(char *);
> -static char *whatcmd(const struct cmd_table **ct, char *);
> -static char *qualify(char *);
> -
> -char cmd_buf[CMD_BUFF_SIZE];
> -
> -int
> -getcmd(void)
> -{
> -     cmd.cmd = NULL;
> -
> -     if (!readline(cmd_buf, sizeof(cmd_buf), cmd.timeout))
> -             cmd.cmd = cmd_table;
> -
> -     return docmd();
> -}
> -
> -int
> -read_conf(void)
> -{
> -#ifndef INSECURE
> -     struct stat sb;
> -#endif
> -     int fd, rc = 0;
> -
> -     if ((fd = open(qualify(cmd.conf), 0)) < 0) {
> -             if (errno != ENOENT && errno != ENXIO) {
> -                     printf("open(%s): %s\n", cmd.path, strerror(errno));
> -                     return 0;
> -             }
> -             return -1;
> -     }
> -
> -#ifndef INSECURE
> -     (void) fstat(fd, &sb);
> -     if (sb.st_uid || (sb.st_mode & 2)) {
> -             printf("non-secure %s, will not proceed\n", cmd.path);
> -             close(fd);
> -             return -1;
> -     }
> -#endif
> -
> -     do {
> -             char *p = cmd_buf;
> -
> -             cmd.cmd = NULL;
> -             do {
> -                     rc = read(fd, p, 1);
> -             } while (rc > 0 && *p++ != '\n' &&
> -                 (p-cmd_buf) < sizeof(cmd_buf));
> -
> -             if (rc < 0) {                   /* Error from read() */
> -                     printf("%s: %s\n", cmd.path, strerror(errno));
> -                     break;
> -             }
> -
> -             if (rc == 0) {                  /* eof from read() */
> -                     if (p != cmd_buf) {     /* Line w/o trailing \n */
> -                             *p = '\0';
> -                             rc = docmd();
> -                             break;
> -                     }
> -             } else {                        /* rc > 0, read a char */
> -                     p--;                    /* Get back to last character */
> -
> -                     if (*p != '\n') {       /* Line was too long */
> -                             printf("%s: line too long\n", cmd.path);
> -
> -                             /* Don't want to run the truncated command */
> -                             rc = -1;
> -                     }
> -                     *p = '\0';
> -             }
> -     } while (rc > 0 && !(rc = docmd()));
> -
> -     close(fd);
> -     return rc;
> -}
> -
> -int
> -docmd(void)
> -{
> -     char *p = NULL;
> -     const struct cmd_table *ct = cmd_table, *cs;
> -
> -     cmd.argc = 1;
> -     if (cmd.cmd == NULL) {
> -
> -             /* command */
> -             for (p = cmd_buf; *p == ' ' || *p == '\t'; p++)
> -                     ;
> -             if (*p == '#' || *p == '\0') { /* comment or empty string */
> -#ifdef DEBUG
> -                     printf("rem\n");
> -#endif
> -                     return 0;
> -             }
> -             ct = cmd_table;
> -             cs = NULL;
> -             cmd.argv[cmd.argc] = p; /* in case it's shortcut boot */
> -             p = whatcmd(&ct, p);
> -             if (ct == NULL) {
> -                     cmd.argc++;
> -                     ct = cmd_table;
> -             } else if (ct->cmd_type == CMDT_SET && p != NULL) {
> -                     cs = cmd_set;
> -#ifdef MACHINE_CMD
> -             } else if (ct->cmd_type == CMDT_MDC && p != NULL) {
> -                     cs = MACHINE_CMD;
> -#endif
> -             }
> -
> -             if (cs != NULL) {
> -                     p = whatcmd(&cs, p);
> -                     if (cs == NULL) {
> -                             printf("%s: syntax error\n", ct->cmd_name);
> -                             return 0;
> -                     }
> -                     ct = cs;
> -             }
> -             cmd.cmd = ct;
> -     }
> -
> -     cmd.argv[0] = ct->cmd_name;
> -     while (p && cmd.argc+1 < sizeof(cmd.argv) / sizeof(cmd.argv[0])) {
> -             cmd.argv[cmd.argc++] = p;
> -             p = nextword(p);
> -     }
> -     cmd.argv[cmd.argc] = NULL;
> -
> -#ifdef REGRESS
> -     printf("%s %s\n", cmd.argv[0],
> -         (cmd.argv[1] == NULL) ? "(null)" : cmd.argv[1]);
> -#else
> -     return (*cmd.cmd->cmd_exec)();
> -#endif
> -}
> -
> -static char *
> -whatcmd(const struct cmd_table **ct, char *p)
> -{
> -     char *q;
> -     int l;
> -
> -     q = nextword(p);
> -
> -     for (l = 0; p[l]; l++)
> -             ;
> -
> -     while ((*ct)->cmd_name != NULL && strncmp(p, (*ct)->cmd_name, l))
> -             (*ct)++;
> -
> -     if ((*ct)->cmd_name == NULL)
> -             *ct = NULL;
> -
> -     return q;
> -}
> -
> -static int
> -readline(char *buf, size_t n, int to)
> -{
> -#ifdef DEBUG
> -     extern int debug;
> -#endif
> -     char *p = buf, ch;
> -
> -     /* Only do timeout if greater than 0 */
> -     if (to > 0) {
> -             u_long i = 0;
> -             time_t tt = getsecs() + to;
> -#ifdef DEBUG
> -             if (debug > 2)
> -                     printf ("readline: timeout(%d) at %u\n", to, tt);
> -#endif
> -             /* check for timeout expiration less often
> -                (for some very constrained archs) */
> -             while (!cnischar())
> -                     if (!(i++ % 1000) && (getsecs() >= tt))
> -                             break;
> -
> -             if (!cnischar()) {
> -                     strlcpy(buf, "boot", 5);
> -                     putchar('\n');
> -                     return strlen(buf);
> -             }
> -     } else
> -             while (!cnischar())
> -                     ;
> -
> -     /* User has typed something.  Turn off timeouts. */
> -     cmd.timeout = 0;
> -
> -     while (1) {
> -             switch ((ch = getchar())) {
> -             case CTRL('u'):
> -                     while (p > buf) {
> -                             putchar('\177');
> -                             p--;
> -                     }
> -                     continue;
> -             case '\n':
> -             case '\r':
> -                     p[1] = *p = '\0';
> -                     break;
> -             case '\b':
> -             case '\177':
> -                     if (p > buf) {
> -                             putchar('\177');
> -                             p--;
> -                     }
> -                     continue;
> -             default:
> -                     if (p - buf < n-1)
> -                             *p++ = ch;
> -                     else {
> -                             putchar('\007');
> -                             putchar('\177');
> -                     }
> -                     continue;
> -             }
> -             break;
> -     }
> -
> -     return p - buf;
> -}
> -
> -/*
> - * Search for spaces/tabs after the current word. If found, \0 the
> - * first one.  Then pass a pointer to the first character of the
> - * next word, or NULL if there is no next word.
> - */
> -char *
> -nextword(char *p)
> -{
> -     /* skip blanks */
> -     while (*p && *p != '\t' && *p != ' ')
> -             p++;
> -     if (*p) {
> -             *p++ = '\0';
> -             while (*p == '\t' || *p == ' ')
> -                     p++;
> -     }
> -     if (*p == '\0')
> -             p = NULL;
> -     return p;
> -}
> -
> -static void
> -print_help(const struct cmd_table *ct)
> -{
> -     for (; ct->cmd_name != NULL; ct++)
> -             printf(" %s", ct->cmd_name);
> -     putchar('\n');
> -}
> -
> -static int
> -Xhelp(void)
> -{
> -     printf("commands:");
> -     print_help(cmd_table);
> -#ifdef MACHINE_CMD
> -     return Xmachine();
> -#else
> -     return 0;
> -#endif
> -}
> -
> -#ifdef MACHINE_CMD
> -static int
> -Xmachine(void)
> -{
> -     printf("machine:");
> -     print_help(MACHINE_CMD);
> -     return 0;
> -}
> -#endif
> -
> -static int
> -Xclear(void)
> -{
> -     int i;
> -
> -     printf("\033[H\033[J");
> -     return 0;
> -}
> -
> -static int
> -Xecho(void)
> -{
> -     int i;
> -
> -     for (i = 1; i < cmd.argc; i++)
> -             printf("%s ", cmd.argv[i]);
> -     putchar('\n');
> -     return 0;
> -}
> -
> -static int
> -Xstty(void)
> -{
> -     int sp;
> -     char *cp;
> -     dev_t dev;
> -
> -     if (cmd.argc == 1) {
> -             printf("%s speed is %d\n", ttyname(0), cnspeed(0, -1));
> -             return 0;
> -     }
> -     dev = ttydev(cmd.argv[1]);
> -     if (dev == NODEV) {
> -             printf("%s not a console device\n", cmd.argv[1]);
> -             return 0;
> -     }
> -
> -     if (cmd.argc == 2)
> -             printf("%s speed is %d\n", cmd.argv[1],
> -                 cnspeed(dev, -1));
> -     else {
> -             sp = 0;
> -             for (cp = cmd.argv[2]; isdigit(*cp); cp++)
> -                     sp = sp * 10 + (*cp - '0');
> -             cnspeed(dev, sp);
> -     }
> -     return 0;
> -}
> -
> -static int
> -Xtime(void)
> -{
> -     time_t tt = getsecs();
> -
> -     if (cmd.argc == 1)
> -             printf(ctime(&tt));
> -
> -     return 0;
> -}
> -
> -static int
> -Xls(void)
> -{
> -     struct stat sb;
> -     char *p;
> -     int fd;
> -
> -     if (stat(qualify((cmd.argv[1]? cmd.argv[1]: "/.")), &sb) < 0) {
> -             printf("stat(%s): %s\n", cmd.path, strerror(errno));
> -             return 0;
> -     }
> -
> -     if ((sb.st_mode & S_IFMT) != S_IFDIR)
> -             ls(cmd.path, &sb);
> -     else {
> -             if ((fd = opendir(cmd.path)) < 0) {
> -                     printf("opendir(%s): %s\n", cmd.path,
> -                         strerror(errno));
> -                     return 0;
> -             }
> -
> -             /* no strlen in lib !!! */
> -             for (p = cmd.path; *p; p++)
> -                     ;
> -             *p++ = '/';
> -             *p = '\0';
> -
> -             while (readdir(fd, p) >= 0) {
> -                     if (stat(cmd.path, &sb) < 0)
> -                             printf("stat(%s): %s\n", cmd.path,
> -                                 strerror(errno));
> -                     else
> -                             ls(p, &sb);
> -             }
> -             closedir (fd);
> -     }
> -     return 0;
> -}
> -
> -#define lsrwx(mode,s) \
> -     putchar ((mode) & S_IROTH? 'r' : '-'); \
> -     putchar ((mode) & S_IWOTH? 'w' : '-'); \
> -     putchar ((mode) & S_IXOTH? *(s): (s)[1]);
> -
> -static void
> -ls(char *name, struct stat *sb)
> -{
> -     putchar("-fc-d-b---l-s-w-"[(sb->st_mode & S_IFMT) >> 12]);
> -     lsrwx(sb->st_mode >> 6, (sb->st_mode & S_ISUID? "sS" : "x-"));
> -     lsrwx(sb->st_mode >> 3, (sb->st_mode & S_ISGID? "sS" : "x-"));
> -     lsrwx(sb->st_mode     , (sb->st_mode & S_ISTXT? "tT" : "x-"));
> -
> -     printf (" %u,%u\t%lu\t%s\n", sb->st_uid, sb->st_gid,
> -         (u_long)sb->st_size, name);
> -}
> -#undef lsrwx
> -
> -int doboot = 1;
> -
> -static int
> -Xnop(void)
> -{
> -     if (doboot) {
> -             doboot = 0;
> -             return (Xboot());
> -     }
> -
> -     return 0;
> -}
> -
> -static int
> -Xboot(void)
> -{
> -     if (cmd.argc > 1 && cmd.argv[1][0] != '-') {
> -             qualify((cmd.argv[1]? cmd.argv[1]: cmd.image));
> -             if (bootparse(2))
> -                     return 0;
> -     } else {
> -             if (bootparse(1))
> -                     return 0;
> -             snprintf(cmd.path, sizeof cmd.path, "%s:%s",
> -                 cmd.bootdev, cmd.image);
> -     }
> -
> -     return 1;
> -}
> -
> -/*
> - * Qualifies the path adding necessary dev
> - */
> -
> -static char *
> -qualify(char *name)
> -{
> -     char *p;
> -
> -     for (p = name; *p; p++)
> -             if (*p == ':')
> -                     break;
> -     if (*p == ':')
> -             strlcpy(cmd.path, name, sizeof(cmd.path));
> -     else
> -             snprintf(cmd.path, sizeof cmd.path, "%s:%s",
> -                 cmd.bootdev, name);
> -     return cmd.path;
> -}
> -
> -static int
> -Xreboot(void)
> -{
> -     printf("Rebooting...\n");
> -     exit();
> -     return 0; /* just in case */
> -}
> -
> Index: arch/zaurus/stand/zboot/conf.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/zaurus/stand/zboot/conf.c,v
> retrieving revision 1.8
> diff -u -p -r1.8 conf.c
> --- arch/zaurus/stand/zboot/conf.c    28 Dec 2013 02:53:04 -0000      1.8
> +++ arch/zaurus/stand/zboot/conf.c    4 Jul 2014 17:39:53 -0000
> @@ -42,7 +42,7 @@
>  #include "unixdev.h"
>  #include <dev/cons.h>
>  
> -const char version[] = "2.09";
> +const char version[] = "2.10";
>  int  debug = 1;
>  
>  void (*zaurus_probe1[])(void) = {
> Index: stand/boot/cmd.c
> ===================================================================
> RCS file: /cvs/src/sys/stand/boot/cmd.c,v
> retrieving revision 1.62
> diff -u -p -r1.62 cmd.c
> --- stand/boot/cmd.c  27 Jun 2014 20:35:37 -0000      1.62
> +++ stand/boot/cmd.c  4 Jul 2014 17:39:53 -0000
> @@ -129,7 +129,6 @@ read_conf(void)
>               char *p = cmd_buf;
>  
>               cmd.cmd = NULL;
> -
>               do {
>                       rc = read(fd, p, 1);
>               } while (rc > 0 && *p++ != '\n' &&
> @@ -155,10 +154,8 @@ read_conf(void)
>                               /* Don't want to run the truncated command */
>                               rc = -1;
>                       }
> -
>                       *p = '\0';
>               }
> -
>       } while (rc > 0 && !(rc = docmd()));
>  
>       close(fd);
> @@ -378,25 +375,25 @@ Xstty(void)
>       char *cp;
>       dev_t dev;
>  
> -     if (cmd.argc == 1)
> +     if (cmd.argc == 1) {
>               printf("%s speed is %d\n", ttyname(0), cnspeed(0, -1));
> -     else {
> -             dev = ttydev(cmd.argv[1]);
> -             if (dev == NODEV)
> -                     printf("%s not a console device\n", cmd.argv[1]);
> -             else {
> -                     if (cmd.argc == 2)
> -                             printf("%s speed is %d\n", cmd.argv[1],
> -                                    cnspeed(dev, -1));
> -                     else {
> -                             sp = 0;
> -                             for (cp = cmd.argv[2]; *cp && isdigit(*cp); 
> cp++)
> -                                     sp = sp * 10 + (*cp - '0');
> -                             cnspeed(dev, sp);
> -                     }
> -             }
> +             return 0;
> +     }
> +     dev = ttydev(cmd.argv[1]);
> +     if (dev == NODEV) {
> +             printf("%s not a console device\n", cmd.argv[1]);
> +             return 0;
>       }
>  
> +     if (cmd.argc == 2)
> +             printf("%s speed is %d\n", cmd.argv[1],
> +                 cnspeed(dev, -1));
> +     else {
> +             sp = 0;
> +             for (cp = cmd.argv[2]; isdigit(*cp); cp++)
> +                     sp = sp * 10 + (*cp - '0');
> +             cnspeed(dev, sp);
> +     }
>       return 0;
>  }
>  
> @@ -407,8 +404,6 @@ Xtime(void)
>  
>       if (cmd.argc == 1)
>               printf(ctime(&tt));
> -     else {
> -     }
>  
>       return 0;
>  }
> @@ -429,8 +424,8 @@ Xls(void)
>               ls(cmd.path, &sb);
>       else {
>               if ((fd = opendir(cmd.path)) < 0) {
> -                     printf ("opendir(%s): %s\n", cmd.path,
> -                             strerror(errno));
> +                     printf("opendir(%s): %s\n", cmd.path,
> +                         strerror(errno));
>                       return 0;
>               }
>  
> @@ -440,10 +435,10 @@ Xls(void)
>               *p++ = '/';
>               *p = '\0';
>  
> -             while(readdir(fd, p) >= 0) {
> +             while (readdir(fd, p) >= 0) {
>                       if (stat(cmd.path, &sb) < 0)
>                               printf("stat(%s): %s\n", cmd.path,
> -                                    strerror(errno));
> +                                 strerror(errno));
>                       else
>                               ls(p, &sb);
>               }

Reply via email to