Shuffle location of generic code into utility.c
-Erik
This commit is contained in:
parent
5cbdd712f5
commit
de7965ca7e
@ -177,6 +177,8 @@ extern pid_t findInitPid();
|
|||||||
|
|
||||||
#if defined BB_FEATURE_MOUNT_LOOP
|
#if defined BB_FEATURE_MOUNT_LOOP
|
||||||
extern int del_loop(const char *device);
|
extern int del_loop(const char *device);
|
||||||
|
extern int set_loop(const char *device, const char *file, int offset, int *loopro);
|
||||||
|
extern char *find_unused_loop_device (void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined BB_GUNZIP || defined BB_GZIP || defined BB_PRINTF || defined BB_TAIL
|
#if defined BB_GUNZIP || defined BB_GZIP || defined BB_PRINTF || defined BB_TAIL
|
||||||
|
71
mount.c
71
mount.c
@ -51,8 +51,6 @@
|
|||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <linux/loop.h>
|
#include <linux/loop.h>
|
||||||
|
|
||||||
static int set_loop(const char *device, const char *file, int offset, int *loopro);
|
|
||||||
static char *find_unused_loop_device (void);
|
|
||||||
|
|
||||||
static int use_loop = 0;
|
static int use_loop = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -177,75 +175,6 @@ extern void whine_if_fstab_is_missing()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined BB_FEATURE_MOUNT_LOOP
|
|
||||||
static int set_loop(const char *device, const char *file, int offset, int *loopro)
|
|
||||||
{
|
|
||||||
struct loop_info loopinfo;
|
|
||||||
int fd, ffd, mode;
|
|
||||||
|
|
||||||
mode = *loopro ? O_RDONLY : O_RDWR;
|
|
||||||
if ((ffd = open (file, mode)) < 0 && !*loopro
|
|
||||||
&& (errno != EROFS || (ffd = open (file, mode = O_RDONLY)) < 0)) {
|
|
||||||
perror (file);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ((fd = open (device, mode)) < 0) {
|
|
||||||
close(ffd);
|
|
||||||
perror (device);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
*loopro = (mode == O_RDONLY);
|
|
||||||
|
|
||||||
memset(&loopinfo, 0, sizeof(loopinfo));
|
|
||||||
strncpy(loopinfo.lo_name, file, LO_NAME_SIZE);
|
|
||||||
loopinfo.lo_name[LO_NAME_SIZE-1] = 0;
|
|
||||||
|
|
||||||
loopinfo.lo_offset = offset;
|
|
||||||
|
|
||||||
loopinfo.lo_encrypt_key_size = 0;
|
|
||||||
if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
|
|
||||||
perror("ioctl: LOOP_SET_FD");
|
|
||||||
close(fd);
|
|
||||||
close(ffd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) {
|
|
||||||
(void) ioctl(fd, LOOP_CLR_FD, 0);
|
|
||||||
perror("ioctl: LOOP_SET_STATUS");
|
|
||||||
close(fd);
|
|
||||||
close(ffd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
close(ffd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *find_unused_loop_device (void)
|
|
||||||
{
|
|
||||||
char dev[20];
|
|
||||||
int i, fd;
|
|
||||||
struct stat statbuf;
|
|
||||||
struct loop_info loopinfo;
|
|
||||||
|
|
||||||
for(i = 0; i <= 7; i++) {
|
|
||||||
sprintf(dev, "/dev/loop%d", i);
|
|
||||||
if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
|
|
||||||
if ((fd = open (dev, O_RDONLY)) >= 0) {
|
|
||||||
if(ioctl (fd, LOOP_GET_STATUS, &loopinfo) == -1) {
|
|
||||||
if (errno == ENXIO) { /* probably free */
|
|
||||||
close (fd);
|
|
||||||
return strdup(dev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close (fd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif /* BB_FEATURE_MOUNT_LOOP */
|
|
||||||
|
|
||||||
/* Seperate standard mount options from the nonstandard string options */
|
/* Seperate standard mount options from the nonstandard string options */
|
||||||
static void
|
static void
|
||||||
parse_mount_options ( char *options, unsigned long *flags, char *strflags)
|
parse_mount_options ( char *options, unsigned long *flags, char *strflags)
|
||||||
|
@ -51,8 +51,6 @@
|
|||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <linux/loop.h>
|
#include <linux/loop.h>
|
||||||
|
|
||||||
static int set_loop(const char *device, const char *file, int offset, int *loopro);
|
|
||||||
static char *find_unused_loop_device (void);
|
|
||||||
|
|
||||||
static int use_loop = 0;
|
static int use_loop = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -177,75 +175,6 @@ extern void whine_if_fstab_is_missing()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined BB_FEATURE_MOUNT_LOOP
|
|
||||||
static int set_loop(const char *device, const char *file, int offset, int *loopro)
|
|
||||||
{
|
|
||||||
struct loop_info loopinfo;
|
|
||||||
int fd, ffd, mode;
|
|
||||||
|
|
||||||
mode = *loopro ? O_RDONLY : O_RDWR;
|
|
||||||
if ((ffd = open (file, mode)) < 0 && !*loopro
|
|
||||||
&& (errno != EROFS || (ffd = open (file, mode = O_RDONLY)) < 0)) {
|
|
||||||
perror (file);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ((fd = open (device, mode)) < 0) {
|
|
||||||
close(ffd);
|
|
||||||
perror (device);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
*loopro = (mode == O_RDONLY);
|
|
||||||
|
|
||||||
memset(&loopinfo, 0, sizeof(loopinfo));
|
|
||||||
strncpy(loopinfo.lo_name, file, LO_NAME_SIZE);
|
|
||||||
loopinfo.lo_name[LO_NAME_SIZE-1] = 0;
|
|
||||||
|
|
||||||
loopinfo.lo_offset = offset;
|
|
||||||
|
|
||||||
loopinfo.lo_encrypt_key_size = 0;
|
|
||||||
if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
|
|
||||||
perror("ioctl: LOOP_SET_FD");
|
|
||||||
close(fd);
|
|
||||||
close(ffd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) {
|
|
||||||
(void) ioctl(fd, LOOP_CLR_FD, 0);
|
|
||||||
perror("ioctl: LOOP_SET_STATUS");
|
|
||||||
close(fd);
|
|
||||||
close(ffd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
close(ffd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *find_unused_loop_device (void)
|
|
||||||
{
|
|
||||||
char dev[20];
|
|
||||||
int i, fd;
|
|
||||||
struct stat statbuf;
|
|
||||||
struct loop_info loopinfo;
|
|
||||||
|
|
||||||
for(i = 0; i <= 7; i++) {
|
|
||||||
sprintf(dev, "/dev/loop%d", i);
|
|
||||||
if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
|
|
||||||
if ((fd = open (dev, O_RDONLY)) >= 0) {
|
|
||||||
if(ioctl (fd, LOOP_GET_STATUS, &loopinfo) == -1) {
|
|
||||||
if (errno == ENXIO) { /* probably free */
|
|
||||||
close (fd);
|
|
||||||
return strdup(dev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close (fd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif /* BB_FEATURE_MOUNT_LOOP */
|
|
||||||
|
|
||||||
/* Seperate standard mount options from the nonstandard string options */
|
/* Seperate standard mount options from the nonstandard string options */
|
||||||
static void
|
static void
|
||||||
parse_mount_options ( char *options, unsigned long *flags, char *strflags)
|
parse_mount_options ( char *options, unsigned long *flags, char *strflags)
|
||||||
|
70
utility.c
70
utility.c
@ -1169,6 +1169,74 @@ extern int del_loop(const char *device)
|
|||||||
close(fd);
|
close(fd);
|
||||||
return( TRUE);
|
return( TRUE);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
extern int set_loop(const char *device, const char *file, int offset, int *loopro)
|
||||||
|
{
|
||||||
|
struct loop_info loopinfo;
|
||||||
|
int fd, ffd, mode;
|
||||||
|
|
||||||
|
mode = *loopro ? O_RDONLY : O_RDWR;
|
||||||
|
if ((ffd = open (file, mode)) < 0 && !*loopro
|
||||||
|
&& (errno != EROFS || (ffd = open (file, mode = O_RDONLY)) < 0)) {
|
||||||
|
perror (file);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if ((fd = open (device, mode)) < 0) {
|
||||||
|
close(ffd);
|
||||||
|
perror (device);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
*loopro = (mode == O_RDONLY);
|
||||||
|
|
||||||
|
memset(&loopinfo, 0, sizeof(loopinfo));
|
||||||
|
strncpy(loopinfo.lo_name, file, LO_NAME_SIZE);
|
||||||
|
loopinfo.lo_name[LO_NAME_SIZE-1] = 0;
|
||||||
|
|
||||||
|
loopinfo.lo_offset = offset;
|
||||||
|
|
||||||
|
loopinfo.lo_encrypt_key_size = 0;
|
||||||
|
if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
|
||||||
|
perror("ioctl: LOOP_SET_FD");
|
||||||
|
close(fd);
|
||||||
|
close(ffd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) {
|
||||||
|
(void) ioctl(fd, LOOP_CLR_FD, 0);
|
||||||
|
perror("ioctl: LOOP_SET_STATUS");
|
||||||
|
close(fd);
|
||||||
|
close(ffd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
close(ffd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern char *find_unused_loop_device (void)
|
||||||
|
{
|
||||||
|
char dev[20];
|
||||||
|
int i, fd;
|
||||||
|
struct stat statbuf;
|
||||||
|
struct loop_info loopinfo;
|
||||||
|
|
||||||
|
for(i = 0; i <= 7; i++) {
|
||||||
|
sprintf(dev, "/dev/loop%d", i);
|
||||||
|
if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) {
|
||||||
|
if ((fd = open (dev, O_RDONLY)) >= 0) {
|
||||||
|
if(ioctl (fd, LOOP_GET_STATUS, &loopinfo) == -1) {
|
||||||
|
if (errno == ENXIO) { /* probably free */
|
||||||
|
close (fd);
|
||||||
|
return strdup(dev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close (fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif /* BB_FEATURE_MOUNT_LOOP */
|
||||||
|
|
||||||
|
|
||||||
/* END CODE */
|
/* END CODE */
|
||||||
|
Loading…
Reference in New Issue
Block a user