VirtualBox

Changeset 613 in kBuild for trunk/src/gmake


Ignore:
Timestamp:
Nov 26, 2006 6:19:04 AM (18 years ago)
Author:
bird
Message:

Added mv as builtin command.

Location:
trunk/src/gmake
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gmake/Makefile.kmk

    r611 r613  
    103103        kmkbuiltin/install.c \
    104104        kmkbuiltin/mkdir.c \
     105        kmkbuiltin/mv.c \
    105106        kmkbuiltin/ln.c \
    106107        kmkbuiltin/rm.c \
     
    125126# Standalone kmkbuiltin commands.
    126127#
    127 PROGRAMS += kmk_append kmk_cat kmk_cp kmk_echo kmk_mkdir kmk_install kmk_ln kmk_rm kmk_rmdir
     128PROGRAMS += kmk_append kmk_cat kmk_cp kmk_echo kmk_mkdir kmk_mv kmk_install kmk_ln kmk_rm kmk_rmdir
    128129
    129130kmk_append_TEMPLATE = BIN
     
    218219kmk_mkdir_DEFS += HAVE_CONFIG_H
    219220kmk_mkdir_SOURCES += \
     221        kmkbuiltin/mscfakes.c \
     222        getopt.c \
     223        getopt1.c
     224endif
     225
     226kmk_mv_TEMPLATE = BIN
     227kmk_mv_DEFS = kmk_builtin_mv=main
     228kmk_mv_SOURCES = \
     229        kmkbuiltin/mv.c \
     230        kmkbuiltin/err.c \
     231        kmkbuiltin/strmode.c
     232ifeq ($(filter-out win32 win64 win nt,$(BUILD_TARGET)),)
     233kmk_mv_INCS += $(PATH_TARGET) .
     234kmk_mv_DEFS += HAVE_CONFIG_H
     235kmk_mv_SOURCES += \
    220236        kmkbuiltin/mscfakes.c \
    221237        getopt.c \
  • trunk/src/gmake/kmkbuiltin.c

    r611 r613  
    192192    else if (!strcmp(pszCmd, "mkdir"))
    193193        rc = kmk_builtin_mkdir(argc, argv, environ);
    194     //else if (!strcmp(pszCmd, "mv"))
    195     //    rc = kmk_builtin_mv(argc, argv, environ);
     194    else if (!strcmp(pszCmd, "mv"))
     195        rc = kmk_builtin_mv(argc, argv, environ);
    196196    else if (!strcmp(pszCmd, "rm"))
    197197        rc = kmk_builtin_rm(argc, argv, environ);
    198198    else if (!strcmp(pszCmd, "rmdir"))
    199199        rc = kmk_builtin_rmdir(argc, argv, environ);
     200    /* rarely used commands: */
    200201    else if (!strcmp(pszCmd, "cat"))
    201202        rc = kmk_builtin_cat(argc, argv, environ);
  • trunk/src/gmake/kmkbuiltin/mv.c

    r612 r613  
    4242#endif /* not lint */
    4343#endif
     44#if 0
    4445#include <sys/cdefs.h>
    4546__FBSDID("$FreeBSD: src/bin/mv/mv.c,v 1.46 2005/09/05 04:36:08 csjp Exp $");
     47#endif
    4648
    4749#include <sys/types.h>
     50#ifndef _MSC_VER
    4851#include <sys/acl.h>
    4952#include <sys/param.h>
    5053#include <sys/time.h>
    5154#include <sys/wait.h>
     55#include <sys/mount.h>
     56#endif
    5257#include <sys/stat.h>
    53 #include <sys/mount.h>
    54 
    55 #include <err.h>
     58
     59#include "err.h"
    5660#include <errno.h>
    5761#include <fcntl.h>
     62#ifndef _MSC_VER
    5863#include <grp.h>
     64#endif
    5965#include <limits.h>
     66#ifndef _MSC_VER
    6067#include <paths.h>
    6168#include <pwd.h>
     69#endif
    6270#include <stdio.h>
    6371#include <stdlib.h>
    6472#include <string.h>
     73#ifndef _MSC_VER
    6574#include <sysexits.h>
    6675#include <unistd.h>
    67 
    68 int fflg, iflg, nflg, vflg;
    69 
    70 int     copy(char *, char *);
    71 int     do_move(char *, char *);
    72 int     fastcopy(char *, char *, struct stat *);
    73 void    usage(void);
     76#else
     77#include "mscfakes.h"
     78#endif
     79
     80#if !defined(__FreeBSD__) && !defined(__APPLE__)
     81extern void strmode(mode_t mode, char *p);
     82#endif
     83
     84static int fflg, iflg, nflg, vflg;
     85
     86static int      do_move(char *, char *);
     87#ifdef CROSS_DEVICE_MOVE
     88static int      fastcopy(char *, char *, struct stat *);
     89static int      copy(char *, char *);
     90#endif
     91static int      usage(void);
     92
     93#if defined(_MSC_VER) || defined(__EMX__) || 0
     94static const char *user_from_uid(unsigned long id, int x)
     95{
     96        static char s_buf[64];
     97        sprintf(s_buf, "%ld", id);
     98        return s_buf;
     99}
     100static const char *group_from_gid(unsigned long id, int x)
     101{
     102        static char s_buf[64];
     103        sprintf(s_buf, "%ld", id);
     104        return s_buf;
     105}
     106#endif
     107
    74108
    75109int
    76 main(int argc, char *argv[])
     110kmk_builtin_mv(int argc, char *argv[])
    77111{
    78112        size_t baselen, len;
     
    82116        int ch;
    83117        char path[PATH_MAX];
     118
     119        /* kmk: reinitialize globals */
     120        fflg = iflg = nflg = vflg = 0;
     121
     122        /* kmk: reset getopt and set progname */
     123        g_progname = argv[0];
     124        opterr = 1;
     125        optarg = NULL;
     126        optopt = 0;
     127#if defined(__FreeBSD__) || defined(__EMX__) || defined(__APPLE__)
     128        optreset = 1;
     129        optind = 1;
     130#else
     131        optind = 0; /* init */
     132#endif
    84133
    85134        while ((ch = getopt(argc, argv, "finv")) != -1)
     
    101150                        break;
    102151                default:
    103                         usage();
     152                        return usage();
    104153                }
    105154        argc -= optind;
     
    107156
    108157        if (argc < 2)
    109                 usage();
     158                return usage();
    110159
    111160        /*
     
    115164        if (stat(argv[argc - 1], &sb) || !S_ISDIR(sb.st_mode)) {
    116165                if (argc > 2)
    117                         usage();
    118                 exit(do_move(argv[0], argv[1]));
     166                        return usage();
     167                return do_move(argv[0], argv[1]);
    119168        }
    120169
    121170        /* It's a directory, move each file into it. */
    122171        if (strlen(argv[argc - 1]) > sizeof(path) - 1)
    123                 errx(1, "%s: destination pathname too long", *argv);
     172                return errx(1, "%s: destination pathname too long", *argv);
    124173        (void)strcpy(path, argv[argc - 1]);
    125174        baselen = strlen(path);
    126175        endp = &path[baselen];
     176#if defined(_MSC_VER) || defined(__EMX__)
     177        if (!baselen || (*(endp - 1) != '/' && *(endp - 1) != '\\' && *(endp - 1) != ':')) {
     178#else
    127179        if (!baselen || *(endp - 1) != '/') {
     180#endif
    128181                *endp++ = '/';
    129182                ++baselen;
     
    135188                 */
    136189                p = *argv + strlen(*argv);
     190#if defined(_MSC_VER) || defined(__EMX__)
     191                while (p != *argv && (p[-1] == '/' || p[-1] == '\\'))
     192                        --p;
     193                while (p != *argv && p[-1] != '/' && p[-1] != '/' && p[-1] != ':')
     194                        --p;
     195#else
    137196                while (p != *argv && p[-1] == '/')
    138197                        --p;
    139198                while (p != *argv && p[-1] != '/')
    140199                        --p;
     200#endif
    141201
    142202                if ((baselen + (len = strlen(p))) >= PATH_MAX) {
     
    149209                }
    150210        }
    151         exit(rval);
    152 }
    153 
    154 int
     211        return rval;
     212}
     213
     214static int
    155215do_move(char *from, char *to)
    156216{
     
    167227
    168228                /* prompt only if source exist */
    169                 if (lstat(from, &sb) == -1) {
     229                if (lstat(from, &sb) == -1) {
    170230                        warn("%s", from);
    171231                        return (1);
     
    206266
    207267        if (errno == EXDEV) {
     268#ifndef CROSS_DEVICE_MOVE
     269                warnx("cannot move `%s' to a different device: `%s'", from, to);
     270                return (1);
     271#else
    208272                struct statfs sfs;
    209273                char path[PATH_MAX];
     
    229293                        }
    230294                }
     295#endif
    231296        } else {
    232297                warn("rename %s to %s", from, to);
     
    234299        }
    235300
     301#ifdef CROSS_DEVICE_MOVE
    236302        /*
    237303         * If rename fails because we're trying to cross devices, and
     
    245311        return (S_ISREG(sb.st_mode) ?
    246312            fastcopy(from, to, &sb) : copy(from, to));
    247 }
    248 
     313#endif
     314}
     315
     316#ifdef CROSS_DEVICE_MOVE
    249317int
    250 fastcopy(char *from, char *to, struct stat *sbp)
     318static fastcopy(char *from, char *to, struct stat *sbp)
    251319{
    252320        struct timeval tval[2];
     
    397465        return (0);
    398466}
    399 
    400 void
     467#endif /* CROSS_DEVICE_MOVE */
     468
     469
     470static int
    401471usage(void)
    402472{
     
    405475                      "usage: mv [-f | -i | -n] [-v] source target",
    406476                      "       mv [-f | -i | -n] [-v] source ... directory");
    407         exit(EX_USAGE);
    408 }
     477        return EX_USAGE;
     478}
Note: See TracChangeset for help on using the changeset viewer.

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