VirtualBox

儲存庫 kBuild 的更動 1705


忽略:
時間撮記:
2008-9-2 上午03:17:42 (16 年 以前)
作者:
bird
訊息:

kmk_chmod: Ported chmod. Fixes #41.

位置:
trunk/src/kmk
檔案:
修改 5 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/kmk/Makefile.am

    r1701 r1705  
    5555                kmkbuiltin/append.c \
    5656                kmkbuiltin/cat.c \
     57                kmkbuiltin/chmod.c \
    5758                kmkbuiltin/cmp.c \
    5859                kmkbuiltin/cmp_util.c \
  • trunk/src/kmk/Makefile.kmk

    r1701 r1705  
    207207        kmkbuiltin/append.c \
    208208        kmkbuiltin/cat.c \
     209        kmkbuiltin/chmod.c \
    209210        kmkbuiltin/cmp.c \
    210211        kmkbuiltin/cmp_util.c \
     
    237238        kmk_append \
    238239        kmk_cat \
     240        kmk_chmod \
    239241        kmk_cp \
    240242        kmk_cmp \
     
    262264kmk_cat_SOURCES = \
    263265        kmkbuiltin/cat.c
     266
     267kmk_chmod_TEMPLATE = BIN-KMK
     268kmk_chmod_DEFS = kmk_builtin_chmod=main
     269kmk_chmod_SOURCES = \
     270        kmkbuiltin/chmod.c
    264271
    265272kmk_cmp_TEMPLATE = BIN-KMK
  • trunk/src/kmk/kmkbuiltin.c

    r1293 r1705  
    208208        rc = kmk_builtin_test(argc, argv, environ, ppapszArgvToSpawn);
    209209    /* rarely used commands: */
     210    else if (!strcmp(pszCmd, "chmod"))
     211        rc = kmk_builtin_chmod(argc, argv, environ);
    210212    else if (!strcmp(pszCmd, "cp"))
    211213        rc = kmk_builtin_cp(argc, argv, environ);
  • trunk/src/kmk/kmkbuiltin.h

    r1292 r1705  
    3939extern int kmk_builtin_cp(int argc, char **argv, char **envp);
    4040extern int kmk_builtin_cat(int argc, char **argv, char **envp);
     41extern int kmk_builtin_chmod(int argc, char **argv, char **envp);
    4142extern int kmk_builtin_cmp(int argc, char **argv, char **envp);
    4243extern int kmk_builtin_echo(int argc, char **argv, char **envp);
  • trunk/src/kmk/kmkbuiltin/chmod.c

    r1704 r1705  
    3939#endif /* not lint */
    4040#endif
    41 #include <sys/cdefs.h>
    42 __FBSDID("$FreeBSD: src/bin/chmod/chmod.c,v 1.33 2005/01/10 08:39:20 imp Exp $");
     41/*#include <sys/cdefs.h> */
     42/*__FBSDID("$FreeBSD: src/bin/chmod/chmod.c,v 1.33 2005/01/10 08:39:20 imp Exp $");*/
    4343
    4444#include <sys/types.h>
    4545#include <sys/stat.h>
    4646
    47 #include <err.h>
     47#include "err.h"
    4848#include <errno.h>
    4949#include <fts.h>
     
    5252#include <stdlib.h>
    5353#include <string.h>
    54 #include <unistd.h>
    55 
    56 void usage(void);
     54#ifndef _MSC_VER
     55# include <unistd.h>
     56#else
     57# include "mscfakes.h"
     58#endif
     59#include "getopt.h"
     60#include "kmkbuiltin.h"
     61
     62#if defined(__APPLE__) && !defined(_DARWIN_FEATURE_UNIX_CONFORMANCE)
     63extern int lchmod(const char *, mode_t);
     64#endif
     65
     66static int usage(FILE *);
     67
     68static struct option long_options[] =
     69{
     70    { "help",                                           no_argument, 0, 261 },
     71    { "version",                                        no_argument, 0, 262 },
     72    { 0, 0,     0, 0 },
     73};
     74
    5775
    5876int
    59 main(int argc, char *argv[])
     77kmk_builtin_chmod(int argc, char *argv[], char **envp)
    6078{
    6179        FTS *ftsp;
     
    6886        int (*change_mode)(const char *, mode_t);
    6987
     88        /* kmk: reset getopt and set progname */
     89        g_progname = argv[0];
     90        opterr = 1;
     91        optarg = NULL;
     92        optopt = 0;
     93        optind = 0; /* init */
     94
    7095        set = NULL;
    7196        Hflag = Lflag = Rflag = fflag = hflag = vflag = 0;
    72         while ((ch = getopt(argc, argv, "HLPRXfghorstuvwx")) != -1)
     97        while ((ch = getopt_long(argc, argv, "HLPRXfghorstuvwx", long_options, NULL)) != -1)
    7398                switch (ch) {
    7499                case 'H':
     
    116141                        vflag++;
    117142                        break;
     143                case 261:
     144                        usage(stdout);
     145                        return 0;
     146                case 262:
     147                        return kbuild_version(argv[0]);
    118148                case '?':
    119149                default:
    120                         usage();
     150                        return usage(stderr);
    121151                }
    122152done:   argv += optind;
     
    124154
    125155        if (argc < 2)
    126                 usage();
     156                return usage(stderr);
    127157
    128158        if (Rflag) {
    129159                fts_options = FTS_PHYSICAL;
    130160                if (hflag)
    131                         errx(1,
     161                        return errx(1,
    132162                "the -R and -h options may not be specified together.");
    133163                if (Hflag)
     
    147177        mode = *argv;
    148178        if ((set = setmode(mode)) == NULL)
    149                 errx(1, "invalid file mode: %s", mode);
     179                return errx(1, "invalid file mode: %s", mode);
    150180
    151181        if ((ftsp = fts_open(++argv, fts_options, 0)) == NULL)
    152                 err(1, "fts_open");
     182                return err(1, "fts_open");
    153183        for (rval = 0; (p = fts_read(ftsp)) != NULL;) {
    154184                switch (p->fts_info) {
     
    208238        }
    209239        if (errno)
    210                 err(1, "fts_read");
     240                rval = err(1, "fts_read");
    211241        free(set);
    212         exit(rval);
     242        fts_close(ftsp);
     243        return rval;
    213244}
    214245
    215 void
    216 usage(void)
     246int
     247usage(FILE *out)
    217248{
    218         (void)fprintf(stderr,
    219             "usage: chmod [-fhv] [-R [-H | -L | -P]] mode file ...\n");
    220         exit(1);
     249        (void)fprintf(out,
     250            "usage: %s [-fhv] [-R [-H | -L | -P]] mode file ...\n"
     251            "   or: %s --version\n"
     252            "   or: %s --help\n",
     253            g_progname, g_progname, g_progname);
     254
     255        return 1;
    221256}
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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