Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
sash
sash-plus-patches-3.7.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File sash-plus-patches-3.7.diff of Package sash
Index: sash-3.7/Makefile =================================================================== --- sash-3.7.orig/Makefile +++ sash-3.7/Makefile @@ -3,12 +3,18 @@ # # The HAVE_GZIP definition adds the -gzip and -gunzip commands. # The HAVE_LINUX_ATTR definition adds the -chattr and -lsattr commands. +# The HAVE_LINUX_CHROOT definition adds the -chroot command. +# The HAVE_LINUX_PIVOT definition adds the -pivot_root command. +# The HAVE_LINUX_LOSETUP definition adds the -losetup command. # The HAVE_LINUX_MOUNT definition makes -mount and -umount work on Linux. # The HAVE_BSD_MOUNT definition makes -mount and -umount work on BSD. # The MOUNT_TYPE definition sets the default file system type for -mount. # HAVE_GZIP = 1 HAVE_LINUX_ATTR = 1 +HAVE_LINUX_CHROOT = 1 +HAVE_LINUX_LOSETUP = 1 +HAVE_LINUX_PIVOT = 1 HAVE_LINUX_MOUNT = 1 HAVE_BSD_MOUNT = 0 MOUNT_TYPE = '"ext3"' @@ -17,6 +23,9 @@ MOUNT_TYPE = '"ext3"' CFLAGS = -Wall -Wmissing-prototypes $(RPM_OPT_FLAGS) \ -DHAVE_GZIP=$(HAVE_GZIP) \ -DHAVE_LINUX_ATTR=$(HAVE_LINUX_ATTR) \ + -DHAVE_LINUX_CHROOT=$(HAVE_LINUX_CHROOT) \ + -DHAVE_LINUX_LOSETUP=$(HAVE_LINUX_LOSETUP) \ + -DHAVE_LINUX_PIVOT=$(HAVE_LINUX_PIVOT) \ -DHAVE_LINUX_MOUNT=$(HAVE_LINUX_MOUNT) \ -DHAVE_BSD_MOUNT=$(HAVE_BSD_MOUNT) \ -DMOUNT_TYPE=$(MOUNT_TYPE) Index: sash-3.7/cmds.c =================================================================== --- sash-3.7.orig/cmds.c +++ sash-3.7/cmds.c @@ -24,6 +24,16 @@ #include <linux/fs.h> #endif +/* Need to tell loop.h what the actual dev_t type is. */ +#undef dev_t +#if defined(__alpha) || (defined(__sparc__) && defined(__arch64__)) +#define dev_t unsigned int +#else +#define dev_t unsigned short +#endif +#include <linux/loop.h> +#undef dev_t +#define dev_t dev_t void do_echo(int argc, const char ** argv) @@ -150,6 +160,28 @@ do_mknod(int argc, const char ** argv) } +#if HAVE_LINUX_PIVOT + +void +do_pivot_root(int argc, const char ** argv) +{ + if (pivot_root(argv[1], argv[2]) < 0) + perror(""); +} + +#endif + +#if HAVE_LINUX_CHROOT + +void +do_chroot(int argc, const char ** argv) +{ + if (chroot(argv[1]) < 0) + perror(""); +} + +#endif + void do_rmdir(int argc, const char ** argv) { @@ -1256,4 +1288,62 @@ do_where(int argc, const char ** argv) printf("Program \"%s\" not found in PATH\n", program); } +#if HAVE_LINUX_LOSETUP + +void +do_losetup(int argc, const char ** argv) +{ + int loopfd; + int targfd; + struct loop_info loopInfo; + + if (!strcmp(argv[1], "-d")) { + loopfd = open(argv[2], O_RDWR); + if (loopfd < 0) { + fprintf(stderr, "Error opening %s: %s\n", argv[2], + strerror(errno)); + return; + } + + if (ioctl(loopfd, LOOP_CLR_FD, 0)) { + fprintf(stderr, "Error unassociating device: %s\n", + strerror(errno)); + return; + } + } + + loopfd = open(argv[1], O_RDWR); + if (loopfd < 0) { + fprintf(stderr, "Error opening %s: %s\n", argv[1], + strerror(errno)); + return; + } + + targfd = open(argv[2], O_RDWR); + if (targfd < 0) { + fprintf(stderr, "Error opening %s: %s\n", argv[2], + strerror(errno)); + return; + } + + if (ioctl(loopfd, LOOP_SET_FD, targfd)) { + fprintf(stderr, "Error setting up loopback device: %s\n", + strerror(errno)); + return; + } + + memset(&loopInfo, 0, sizeof(loopInfo)); + strcpy(loopInfo.lo_name, argv[2]); + + if (ioctl(loopfd, LOOP_SET_STATUS, &loopInfo)) { + fprintf(stderr, "Error setting up loopback device: %s\n", + strerror(errno)); + return; + } + + return; +} + +#endif + /* END CODE */ Index: sash-3.7/sash.1 =================================================================== --- sash-3.7.orig/sash.1 +++ sash-3.7/sash.1 @@ -22,11 +22,11 @@ is that many of the standard system comm These built-in commands are: .PP .nf - -ar, -chattr, -chgrp, -chmod, -chown, -cmp, -cp, - -dd, -echo, -ed, -grep, -file, -find, -gunzip, - -gzip, -kill, -ln, -ls, -lsattr, -mkdir, -mknod, - -more, -mount, -mv, -printenv, -pwd, -rm, -rmdir, - -sum, -sync, -tar, -touch, -umount, -where + -ar, -chattr, -chgrp, -chmod, -chown, -chroot, -cmp, + -cp, -dd, -echo, -ed, -grep, -file, -find, -gunzip, + -gzip, -kill, -losetup, -ln, -ls, -lsattr, -mkdir, + -mknod, -more, -mount, -mv, -pivot_root, -printenv, -pwd, + -rm, -rmdir, -sum, -sync, -tar, -touch, -umount, -where .fi .PP These commands are generally similar to the standard programs with similar @@ -138,6 +138,13 @@ Change the owner id for the specified li can either be a user name, or a decimal value. .TP +.B -chroot path +Changes the root directory to that specified in +.I path. +This directory +will be used for path names beginning with /. The root directory is +inherited by all children of the current process. +.TP .B -cmp fileName1 fileName2 Determines whether or not the specified file names have identical data. This says that the files are links to each other, are different sizes, @@ -312,6 +319,20 @@ is a numeric value, or one of the specia QUIT, KILL, TERM, STOP, CONT, USR1 or USR2. If no signal is specified then SIGTERM is used. .TP +.B -losetup [-d] loopDev [file] +Associates loopback devices with files on the system. If +.I -d +is not given, +the loopback device +.I loopDev +is associated with +.I file. +If +.I -d +is given, +.I loopDev +is unassociated with the file it's currently configured for. +.TP .B -ln [-s] srcName ... destName Links one or more files from the .I srcName @@ -388,6 +409,13 @@ same names as the srcNames. Renames are this fails because of the files being on different filesystems, then copies and deletes are done instead. .TP +.B -pivot_root newRoot putOld +Moves the root file system of the current process to the directory +.I putOld +and makes +.I newRoot +the new root file system of the current process. +.TP .B -printenv [name] If .I name Index: sash-3.7/sash.c =================================================================== --- sash-3.7.orig/sash.c +++ sash-3.7/sash.c @@ -18,7 +18,7 @@ #include <linux/major.h> #include <linux/raid/md_u.h> -static const char * const version = "3.7"; +static const char * const version = "3.7-fb"; /* @@ -110,6 +110,14 @@ static const CommandEntry commandEntryTa "srcName ... destName" }, +#ifdef HAVE_LINUX_CHROOT + { + "-chroot", do_chroot, 2, 2, + "change root file system", + "new_root_dir" + }, +#endif + { "-dd", do_dd, 3, INFINITE_ARGS, "Copy data between two files", @@ -184,6 +192,14 @@ static const CommandEntry commandEntryTa "[-sig] pid ..." }, +#ifdef HAVE_LINUX_LOSETUP + { + "-losetup", do_losetup, 3, 3, + "Associate a loopback device with a file", + "[-d] device\n -losetup device filename" + }, +#endif + { "-ln", do_ln, 3, INFINITE_ARGS, "Link one fileName to another", @@ -240,6 +256,14 @@ static const CommandEntry commandEntryTa "srcName ... destName" }, +#ifdef HAVE_LINUX_PIVOT + { + "-pivot_root", do_pivot_root, 3, 3, + "pivot the root file system", + "new_dir old_dir" + }, +#endif + { "-printenv", do_printenv, 1, 2, "Print environment variables", @@ -392,6 +416,7 @@ static void childProcess(const char * cm static void showPrompt(void); static void usage(void); static Alias * findAlias(const char * name); +static void expandVariable(char * name); /* @@ -711,6 +736,11 @@ command(const char * cmd) } /* + * Expand simple environment variables + */ + while (strstr(cmd, "$(")) expandVariable((char *)cmd); + + /* * Now look for the command in the builtin table, and execute * the command if found. */ @@ -1296,4 +1326,29 @@ usage(void) exit(1); } +/* + * Expand one environment variable: Syntax $(VAR) + */ +static void +expandVariable(char * cmd) +{ + char tmp[CMD_LEN]; + char *cp; + char *ep; + + strcpy(tmp, cmd); + cp = strstr(tmp, "$("); + if (cp) { + *cp++ = '\0'; + strcpy(cmd, tmp); + ep = ++cp; + while (*ep && (*ep != ')')) ep++; + if (*ep == ')') *ep++ = '\0'; + cp = getenv(cp); + if (cp) strcat(cmd, cp); + strcat(cmd, ep); + } + return; +} + /* END CODE */ Index: sash-3.7/sash.h =================================================================== --- sash-3.7.orig/sash.h +++ sash-3.7/sash.h @@ -111,6 +111,18 @@ extern void do_lsattr(int argc, const ch extern void do_chattr(int argc, const char ** argv); #endif +#if HAVE_LINUX_CHROOT +extern void do_chroot(int argc, const char ** argv); +#endif + +#if HAVE_LINUX_LOSETUP +extern void do_losetup(int argc, const char ** argv); +#endif + +#if HAVE_LINUX_PIVOT +extern void do_pivot_root(int argc, const char ** argv); +extern int pivot_root(const char *new_root, const char *put_old); +#endif /* * Global utility routines.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor