More stuff
This commit is contained in:
@ -48,9 +48,9 @@ static int fileAction(const char *fileName)
|
||||
((chownApp==TRUE)? uid: statBuf.st_uid),
|
||||
gid) < 0)) {
|
||||
perror(fileName);
|
||||
return( TRUE);
|
||||
return( FALSE);
|
||||
}
|
||||
return( FALSE);
|
||||
return( TRUE);
|
||||
}
|
||||
|
||||
int chown_main(int argc, char **argv)
|
||||
|
@ -47,43 +47,9 @@ static int fileAction(const char *fileName)
|
||||
char newdestName[NAME_MAX];
|
||||
strcpy(newdestName, destName);
|
||||
strcat(newdestName, fileName+(strlen(srcName)));
|
||||
fprintf(stderr, "A: copying %s to %s\n", fileName, newdestName);
|
||||
return (copyFile(fileName, newdestName, preserveFlag, followLinks));
|
||||
}
|
||||
|
||||
static int dirAction(const char *fileName)
|
||||
{
|
||||
char newdestName[NAME_MAX];
|
||||
struct stat statBuf;
|
||||
struct utimbuf times;
|
||||
|
||||
strcpy(newdestName, destName);
|
||||
strcat(newdestName, fileName+(strlen(srcName)));
|
||||
if (stat(newdestName, &statBuf)) {
|
||||
if (mkdir( newdestName, 0777777 ^ umask (0))) {
|
||||
perror(newdestName);
|
||||
return( FALSE);
|
||||
}
|
||||
}
|
||||
else if (!S_ISDIR (statBuf.st_mode)) {
|
||||
fprintf(stderr, "`%s' exists but is not a directory", newdestName);
|
||||
return( FALSE);
|
||||
}
|
||||
if (preserveFlag==TRUE) {
|
||||
/* Try to preserve premissions, but don't whine on failure */
|
||||
if (stat(newdestName, &statBuf)) {
|
||||
perror(newdestName);
|
||||
return( FALSE);
|
||||
}
|
||||
chmod(newdestName, statBuf.st_mode);
|
||||
chown(newdestName, statBuf.st_uid, statBuf.st_gid);
|
||||
times.actime = statBuf.st_atime;
|
||||
times.modtime = statBuf.st_mtime;
|
||||
utime(newdestName, ×);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
extern int cp_main(int argc, char **argv)
|
||||
{
|
||||
|
||||
|
@ -43,6 +43,50 @@ df(char* device, const char * mountPoint)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Given a block device, find the mount table entry if that block device
|
||||
* is mounted.
|
||||
*
|
||||
* Given any other file (or directory), find the mount table entry for its
|
||||
* filesystem.
|
||||
*/
|
||||
extern struct mntent *
|
||||
findMountPoint(const char* name, const char* table)
|
||||
{
|
||||
struct stat s;
|
||||
dev_t mountDevice;
|
||||
FILE * mountTable;
|
||||
struct mntent * mountEntry;
|
||||
|
||||
if ( stat(name, &s) != 0 )
|
||||
return 0;
|
||||
|
||||
if ( (s.st_mode & S_IFMT) == S_IFBLK )
|
||||
mountDevice = s.st_rdev;
|
||||
else
|
||||
mountDevice = s.st_dev;
|
||||
|
||||
|
||||
if ( (mountTable = setmntent(table, "r")) == 0 )
|
||||
return 0;
|
||||
|
||||
while ( (mountEntry = getmntent(mountTable)) != 0 ) {
|
||||
if ( strcmp(name, mountEntry->mnt_dir) == 0
|
||||
|| strcmp(name, mountEntry->mnt_fsname) == 0 ) /* String match. */
|
||||
break;
|
||||
if ( stat(mountEntry->mnt_fsname, &s) == 0
|
||||
&& s.st_rdev == mountDevice ) /* Match the device. */
|
||||
break;
|
||||
if ( stat(mountEntry->mnt_dir, &s) == 0
|
||||
&& s.st_dev == mountDevice ) /* Match the directory's mount point. */
|
||||
break;
|
||||
}
|
||||
endmntent(mountTable);
|
||||
return mountEntry;
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern int
|
||||
df_main(int argc, char * * argv)
|
||||
{
|
||||
@ -90,47 +134,3 @@ df_main(int argc, char * * argv)
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Given a block device, find the mount table entry if that block device
|
||||
* is mounted.
|
||||
*
|
||||
* Given any other file (or directory), find the mount table entry for its
|
||||
* filesystem.
|
||||
*/
|
||||
extern struct mntent *
|
||||
findMountPoint(const char* name, const char* table)
|
||||
{
|
||||
struct stat s;
|
||||
dev_t mountDevice;
|
||||
FILE * mountTable;
|
||||
struct mntent * mountEntry;
|
||||
|
||||
if ( stat(name, &s) != 0 )
|
||||
return 0;
|
||||
|
||||
if ( (s.st_mode & S_IFMT) == S_IFBLK )
|
||||
mountDevice = s.st_rdev;
|
||||
else
|
||||
mountDevice = s.st_dev;
|
||||
|
||||
|
||||
if ( (mountTable = setmntent(table, "r")) == 0 )
|
||||
return 0;
|
||||
|
||||
while ( (mountEntry = getmntent(mountTable)) != 0 ) {
|
||||
if ( strcmp(name, mountEntry->mnt_dir) == 0
|
||||
|| strcmp(name, mountEntry->mnt_fsname) == 0 ) /* String match. */
|
||||
break;
|
||||
if ( stat(mountEntry->mnt_fsname, &s) == 0
|
||||
&& s.st_rdev == mountDevice ) /* Match the device. */
|
||||
break;
|
||||
if ( stat(mountEntry->mnt_dir, &s) == 0
|
||||
&& s.st_dev == mountDevice ) /* Match the directory's mount point. */
|
||||
break;
|
||||
}
|
||||
endmntent(mountTable);
|
||||
return mountEntry;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user