mirror of https://github.com/mabam/CAP.git
217 lines
4.6 KiB
C
217 lines
4.6 KiB
C
/*
|
|
* $Author: djh $ $Date: 1996/06/19 10:51:19 $
|
|
* $Header: /mac/src/cap60/applications/aufs/RCS/afpidtool.c,v 2.3 1996/06/19 10:51:19 djh Rel djh $
|
|
* $Revision: 2.3 $
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Tell the AUFS fixed directory ID sever to do some basic things
|
|
*
|
|
* John Forrest <jf@ap.co.umist.ac.uk>
|
|
*
|
|
*/
|
|
|
|
#ifdef FIXED_DIRIDS
|
|
|
|
#include <sys/types.h>
|
|
#include <sys/param.h>
|
|
#include <stdio.h>
|
|
#include <errno.h>
|
|
#ifdef USESTRINGDOTH
|
|
# include <string.h>
|
|
#else USESTRINGDOTH
|
|
# include <strings.h>
|
|
#endif USESTRINGDOTH
|
|
|
|
#include "../../lib/afp/afpidaufs.h"
|
|
|
|
int verbose = 0;
|
|
|
|
void
|
|
fatal(message)
|
|
char *message;
|
|
{
|
|
if (message != NULL)
|
|
fprintf(stderr, "%s:", message);
|
|
if (errno > 0)
|
|
perror("");
|
|
else
|
|
putc('\n', stderr);
|
|
exit(-1);
|
|
}
|
|
|
|
void
|
|
fatal2(message, a1)
|
|
char *message, *a1;
|
|
{
|
|
fprintf(stderr, "afpidtool: fatal error: %s%s :", message, a1);
|
|
fatal(NULL);
|
|
}
|
|
|
|
void
|
|
getcdwd(path, result)
|
|
char *path, *result;
|
|
{
|
|
char command [256];
|
|
FILE *pwd;
|
|
|
|
sprintf(command, "cd '%s'; pwd\n", path);
|
|
if ((pwd = popen(command, "r")) == NULL)
|
|
strcpy(result, "");
|
|
else {
|
|
fgets(result, MAXPATHLEN, pwd);
|
|
pclose(pwd);
|
|
if (result[0] != '/')
|
|
strcpy(result, "");
|
|
result[strlen(result)-1] = '\0'; /* remove trailing lf */
|
|
}
|
|
}
|
|
|
|
void
|
|
doFullPath(path, fullPath)
|
|
char *path, *fullPath;
|
|
{
|
|
char *ptr;
|
|
|
|
if (path[0] == '\0')
|
|
#ifdef SOLARIS
|
|
getcwd(fullPath, MAXPATHLEN);
|
|
#else /* SOLARIS */
|
|
getwd(fullPath);
|
|
#endif /* SOLARIS */
|
|
else
|
|
if (is_directory(path))
|
|
getcdwd(path, fullPath);
|
|
else
|
|
if ((ptr = (char *)rindex(path, '/')) != NULL) {
|
|
*ptr = '\0';
|
|
doFullPath(path, fullPath);
|
|
strcat(fullPath, "/");
|
|
strcat(fullPath, ptr+1);
|
|
} else { /* directory name only */
|
|
doFullPath("", fullPath);
|
|
strcat(fullPath, "/");
|
|
strcat(fullPath, path);
|
|
}
|
|
}
|
|
|
|
char *fullpath(path)
|
|
char *path;
|
|
{
|
|
char temp[MAXPATHLEN];
|
|
char fullPath[MAXPATHLEN];
|
|
|
|
if (is_directory(path))
|
|
getcdwd(path, fullPath);
|
|
else {
|
|
strcpy(temp, path);
|
|
doFullPath(path, fullPath);
|
|
}
|
|
|
|
return string_copy(fullPath);
|
|
}
|
|
|
|
main(argc, argv)
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
int c;
|
|
extern char *optarg;
|
|
extern optind;
|
|
char *arg1, *arg2;
|
|
sdword id1, id2;
|
|
|
|
int res;
|
|
|
|
while ((c = getopt(argc, argv, "vn:a:m:d:r:cN:A:D:M:R:")) != -1) {
|
|
switch (c) {
|
|
case 'v':
|
|
verbose = 1;
|
|
break;
|
|
case 'n': case 'a':
|
|
arg1 = fullpath(optarg);
|
|
if (verbose)
|
|
fprintf(stderr, "New %s\n", arg1);
|
|
if (send_new(arg1) < 0)
|
|
fatal("Sending new");
|
|
break;
|
|
case 'N': case 'A':
|
|
id1 = atoi(optarg);
|
|
arg1 = argv[optind++];
|
|
if (verbose)
|
|
fprintf(stderr, "New %d/%s\n", id1, arg1);
|
|
if (send_new_id(id1,arg1) < 0)
|
|
fatal("Sending new");
|
|
break;
|
|
case 'd':
|
|
arg1 = fullpath(optarg);
|
|
if (verbose)
|
|
fprintf(stderr, "Delete %s\n", arg1);
|
|
if (send_delete(arg1) < 0)
|
|
fatal("Sending delete");
|
|
break;
|
|
case 'D':
|
|
id1 = atoi(optarg);
|
|
if (verbose)
|
|
fprintf(stderr, "Delete %d\n", id1);
|
|
if (send_delete_id(id1) < 0)
|
|
fatal("Sending delete");
|
|
break;
|
|
case 'm':
|
|
arg1 = fullpath(optarg);
|
|
arg2 = fullpath(argv[optind++]);
|
|
if (verbose)
|
|
fprintf(stderr, "Move %s -> %s\n", arg1, arg2);
|
|
if (send_move(arg1, arg2) < 0)
|
|
fatal("Sending move");
|
|
break;
|
|
case 'M':
|
|
id1 = atoi(optarg);
|
|
arg1 = argv[optind++];
|
|
id2 = atoi(argv[optind++]);
|
|
arg2 = argv[optind++];
|
|
if (verbose)
|
|
fprintf(stderr, "Move %d/%s -> %s\n",
|
|
id1, arg1, id2, arg2);
|
|
if (send_move_id(id1, arg1, id2, arg2) < 0)
|
|
fatal("Sending move");
|
|
break;
|
|
case 'r':
|
|
arg1 = fullpath(optarg);
|
|
arg2 = argv[optind++];
|
|
if (verbose)
|
|
fprintf(stderr, "Rename %s -> %s\n", arg1, arg2);
|
|
if (send_rename(arg1, arg2) < 0)
|
|
fatal("Sending rename");
|
|
break;
|
|
case 'R':
|
|
id1 = atoi(optarg);
|
|
arg1 = argv[optind++];
|
|
if (verbose)
|
|
fprintf(stderr, "Rename %d -> %s\n", id1, arg1);
|
|
if (send_rename_id(id1, arg1) < 0)
|
|
fatal("Sending rename");
|
|
break;
|
|
case 'c':
|
|
if (verbose)
|
|
fprintf(stderr, "Clean\n");
|
|
if (send_clean() < 0)
|
|
fatal("Sending clean");
|
|
break;
|
|
case '?':
|
|
fprintf(stderr,
|
|
"usage: afpidtool [-v] [-n path] [-d path] [-m from to]\n");
|
|
exit(-1);
|
|
}
|
|
}
|
|
exit(0);
|
|
}
|
|
#else FIXED_DIRIDS
|
|
#include <stdio.h>
|
|
main()
|
|
{
|
|
printf("afpidtool: not compiled with -DFIXED_DIRIDS\n");
|
|
}
|
|
#endif FIXED_DIRIDS
|