VirtualBox

Changeset 611 in kBuild


Ignore:
Timestamp:
Nov 26, 2006 5:35:06 AM (18 years ago)
Author:
bird
Message:

Added cat as builtin command.

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r601 r611  
    332006-11-25:
    44    - kmk, kBuild:
     5        o Added cat as builtin command.
     6        o Added GNU sed version 4.1.5 and ported it to MSC.
    57        o Added rmdir as builtin and external command.
    68        o Made mkdir not modify the argument strings.
  • trunk/src/gmake/Makefile.kmk

    r601 r611  
    9797        kmkbuiltin.c \
    9898        kmkbuiltin/append.c \
     99        kmkbuiltin/cat.c \
    99100        kmkbuiltin/cp.c \
    100101        kmkbuiltin/cp_utils.c \
     
    124125# Standalone kmkbuiltin commands.
    125126#
    126 PROGRAMS += kmk_append kmk_cp kmk_echo kmk_mkdir kmk_install kmk_ln kmk_rm kmk_rmdir
     127PROGRAMS += kmk_append kmk_cat kmk_cp kmk_echo kmk_mkdir kmk_install kmk_ln kmk_rm kmk_rmdir
    127128
    128129kmk_append_TEMPLATE = BIN
     
    132133        kmkbuiltin/append.c \
    133134        kmkbuiltin/err.c
     135
     136kmk_cat_TEMPLATE = BIN
     137kmk_cat_DEFS = kmk_builtin_cat=main
     138kmk_cat_SOURCES = \
     139        kmkbuiltin/cat.c \
     140        kmkbuiltin/err.c
     141ifeq ($(filter-out win32 win64 win nt,$(BUILD_TARGET)),)
     142kmk_cat_INCS += $(PATH_TARGET) .
     143kmk_cat_DEFS += HAVE_CONFIG_H
     144kmk_cat_SOURCES += \
     145        kmkbuiltin/mscfakes.c \
     146        getopt.c \
     147        getopt1.c
     148endif
    134149
    135150kmk_cp_TEMPLATE = BIN
  • trunk/src/gmake/kmkbuiltin.c

    r601 r611  
    198198    else if (!strcmp(pszCmd, "rmdir"))
    199199        rc = kmk_builtin_rmdir(argc, argv, environ);
    200     /* obsolete */
     200    else if (!strcmp(pszCmd, "cat"))
     201        rc = kmk_builtin_cat(argc, argv, environ);
    201202    else if (!strcmp(pszCmd, "cp"))
    202203        rc = kmk_builtin_cp(argc, argv, environ);
  • trunk/src/gmake/kmkbuiltin.h

    r370 r611  
    3030extern int kmk_builtin_append(int argc, char **argv, char **envp);
    3131extern int kmk_builtin_cp(int argc, char **argv, char **envp);
     32extern int kmk_builtin_cat(int argc, char **argv, char **envp);
    3233extern int kmk_builtin_echo(int argc, char **argv, char **envp);
    3334extern int kmk_builtin_install(int argc, char **argv, char **envp);
  • trunk/src/gmake/kmkbuiltin/cat.c

    r609 r611  
    4444#endif
    4545#endif /* not lint */
     46#if 0
    4647#include <sys/cdefs.h>
    4748__FBSDID("$FreeBSD: src/bin/cat/cat.c,v 1.32 2005/01/10 08:39:20 imp Exp $");
    48 
     49#else
     50#define NO_UDOM_SUPPORT /* kmk */
     51#endif
     52
     53#ifndef _MSC_VER
    4954#include <sys/param.h>
     55#endif
    5056#include <sys/stat.h>
    5157#ifndef NO_UDOM_SUPPORT
     
    5662
    5763#include <ctype.h>
    58 #include <err.h>
     64#include "err.h"
    5965#include <fcntl.h>
    6066#include <locale.h>
     
    6268#include <stdlib.h>
    6369#include <string.h>
     70#ifndef _MSC_VER
    6471#include <unistd.h>
     72#else
     73#include "mscfakes.h"
     74#endif
    6575#include <stddef.h>
    6676
    6777int bflag, eflag, nflag, sflag, tflag, vflag;
    68 int rval;
     78/*int rval;*/
    6979const char *filename;
    7080
    71 static void usage(void);
    72 static void scanfiles(char *argv[], int cooked);
    73 static void cook_cat(FILE *);
    74 static void raw_cat(int);
     81static int usage(void);
     82static int scanfiles(char *argv[], int cooked);
     83static int cook_cat(FILE *);
     84static int raw_cat(int);
    7585
    7686#ifndef NO_UDOM_SUPPORT
     
    7989
    8090int
    81 main(int argc, char *argv[])
    82 {
    83         int ch;
    84 
     91kmk_builtin_cat(int argc, char *argv[])
     92{
     93        int ch, rc;
     94
     95        /* kmk: reinitialize globals */
     96        bflag = eflag = nflag = sflag = tflag = vflag = 0;
     97        filename = NULL;
     98
     99        /* kmk: reset getopt and set progname */
     100        g_progname = argv[0];
     101        opterr = 1;
     102        optarg = NULL;
     103        optopt = 0;
     104#if defined(__FreeBSD__) || defined(__EMX__) || defined(__APPLE__)
     105        optreset = 1;
     106        optind = 1;
     107#else
     108        optind = 0; /* init */
     109#endif
     110
     111#ifdef kmk_builtin_cat /* kmk did this already. */
    85112        setlocale(LC_CTYPE, "");
     113#endif
    86114
    87115        while ((ch = getopt(argc, argv, "benstuv")) != -1)
     
    109137                        break;
    110138                default:
    111                         usage();
     139                        return usage();
    112140                }
    113141        argv += optind;
    114142
    115143        if (bflag || eflag || nflag || sflag || tflag || vflag)
    116                 scanfiles(argv, 1);
     144                rc = scanfiles(argv, 1);
    117145        else
    118                 scanfiles(argv, 0);
     146                rc = scanfiles(argv, 0);
     147#ifdef kmk_builtin_cat /* only in the external program. */
    119148        if (fclose(stdout))
    120                 err(1, "stdout");
    121         exit(rval);
    122         /* NOTREACHED */
    123 }
    124 
    125 static void
     149                return err(1, "stdout");
     150#endif
     151        return rc;
     152}
     153
     154static int
    126155usage(void)
    127156{
    128157        fprintf(stderr, "usage: cat [-benstuv] [file ...]\n");
    129         exit(1);
    130         /* NOTREACHED */
    131 }
    132 
    133 static void
     158        return 1;
     159}
     160
     161static int
    134162scanfiles(char *argv[], int cooked)
    135163{
     
    137165        char *path;
    138166        FILE *fp;
     167        int rc2 = 0;
     168        int rc = 0;
    139169
    140170        while ((path = argv[i]) != NULL || i == 0) {
     
    154184                if (fd < 0) {
    155185                        warn("%s", path);
    156                         rval = 1;
     186                        rc2 = 1; /* non fatal */
    157187                } else if (cooked) {
    158188                        if (fd == STDIN_FILENO)
    159                                 cook_cat(stdin);
     189                                rc = cook_cat(stdin);
    160190                        else {
    161191                                fp = fdopen(fd, "r");
    162                                 cook_cat(fp);
     192                                rc = cook_cat(fp);
    163193                                fclose(fp);
    164194                        }
    165195                } else {
    166                         raw_cat(fd);
     196                        rc = raw_cat(fd);
    167197                        if (fd != STDIN_FILENO)
    168198                                close(fd);
    169199                }
    170                 if (path == NULL)
     200                if (rc || path == NULL)
    171201                        break;
    172202                ++i;
    173203        }
    174 }
    175 
    176 static void
     204        return !rc ? rc2 : rc;
     205}
     206
     207static int
    177208cook_cat(FILE *fp)
    178209{
    179210        int ch, gobble, line, prev;
     211        int rc = 0;
    180212
    181213        /* Reset EOF condition on stdin. */
     
    228260        if (ferror(fp)) {
    229261                warn("%s", filename);
    230                 rval = 1;
     262                rc = 1;
    231263                clearerr(fp);
    232264        }
    233265        if (ferror(stdout))
    234                 err(1, "stdout");
    235 }
    236 
    237 static void
     266                return err(1, "stdout");
     267        return rc;
     268}
     269
     270static int
    238271raw_cat(int rfd)
    239272{
     
    247280        if (buf == NULL) {
    248281                if (fstat(wfd, &sbuf))
    249                         err(1, "%s", filename);
     282                        return err(1, "%s", filename);
     283#ifdef _MSC_VER
     284                bsize = 1024;
     285#else
    250286                bsize = MAX(sbuf.st_blksize, 1024);
     287#endif
    251288                if ((buf = malloc(bsize)) == NULL)
    252                         err(1, "buffer");
     289                        return err(1, "buffer");
    253290        }
    254291        while ((nr = read(rfd, buf, bsize)) > 0)
    255292                for (off = 0; nr; nr -= nw, off += nw)
    256293                        if ((nw = write(wfd, buf + off, (size_t)nr)) < 0)
    257                                 err(1, "stdout");
     294                                return err(1, "stdout");
    258295        if (nr < 0) {
    259296                warn("%s", filename);
    260                 rval = 1;
    261         }
     297                return 1;
     298        }
     299        return 0;
    262300}
    263301
  • trunk/src/gmake/kmkbuiltin/mkdir.c

    r601 r611  
    7979        mode = NULL;
    8080
    81         /* reinitialize globals */
    82         vflag = 0;
    83 
    84         /* kmk: reset getopt and set progname */
    85         g_progname = argv[0];
    86         opterr = 1;
    87         optarg = NULL;
    88         optopt = 0;
     81    /* reinitialize globals */
     82    vflag = 0;
     83   
     84    /* kmk: reset getopt and set progname */
     85    g_progname = argv[0];
     86    opterr = 1;
     87    optarg = NULL;
     88    optopt = 0;
    8989#if defined(__FreeBSD__) || defined(__EMX__) || defined(__APPLE__)
    90         optreset = 1;
    91         optind = 1;
     90    optreset = 1;
     91    optind = 1;
    9292#else
    93         optind = 0; /* init */
     93    optind = 0; /* init */
    9494#endif
    9595        while ((ch = getopt(argc, argv, "m:pv")) != -1)
  • trunk/src/gmake/variable.c

    r601 r611  
    10621062#ifdef CONFIG_WITH_KMK_BUILTIN
    10631063  /* The supported kMk Builtin commands. */
    1064   (void) define_variable ("KMK_BUILTIN", 11, "append cp echo install ln mkdir rm rmdir", o_default, 0);
     1064  (void) define_variable ("KMK_BUILTIN", 11, "append cp cat echo install ln mkdir rm rmdir", o_default, 0);
    10651065#endif
    10661066
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette