示例#1
0
static void
mode_string (unsigned short mode, char *str)
{
  str[0] = ftypelet (mode);
  rwx ((unsigned short) ((mode & 0700) << 0), &str[1]);
  rwx ((unsigned short) ((mode & 0070) << 3), &str[4]);
  rwx ((unsigned short) ((mode & 0007) << 6), &str[7]);
  setst (mode, str);
}
示例#2
0
/* %M */
static int print_sd_mode (FILE * stream,
			  const struct printf_info *info,
			  const void *const *args)
{
    int len = 0;
    mode_t mode;

    mode = *(mode_t *)args[0];
    len = fprintf (stream, "%c", ftypelet (mode));
    len += rwx (stream, (mode & 0700) << 0);
    len += rwx (stream, (mode & 0070) << 3);
    len += rwx (stream, (mode & 0007) << 6);
    return len;
}
示例#3
0
/*------------------------------------------------------------------30/Jan/87-*
 * printit(sb, f, n) - print the field
 *
 * Inputs    -> (struct stat*), (struct field*), (int)
 *
 * Results   -> Displays the field, with special handling of weird fields like
 *		mode and mtime.  The mode field is dumped in octal, followed
 *		by one or more of the S_IF<X> and/or S_I<X> values.
 *----------------------------------------------------------------larry mcvoy-*/
void printit(struct stat* sb, struct field* f, int n)
{
    if (n > 1)
	printf("%s: ", f->f_name);
    if (equal(f->f_name, "mode")) {
		/* This lot changed to my personal liking. (kjb) */
	char bit[11];

	printf("%07lo, ", (u_long) sb->st_mode);

	strcpy(bit, "----------");

	switch (sb->st_mode&S_IFMT) {
	case S_IFDIR:	bit[0]='d';	break;
# ifdef S_IFFIFO
	case S_IFFIFO:	bit[0]='p';	break;
# endif
	case S_IFCHR:	bit[0]='c';	break;
	case S_IFBLK:	bit[0]='b';	break;
# ifdef S_IFSOCK
	case S_IFSOCK:	bit[0]='S';	break;
# endif
# ifdef S_IFMPC
	case S_IFMPC:	bit[0]='C';	break;
# endif
# ifdef S_IFMPB
	case S_IFMPB:	bit[0]='B';	break;
# endif
# ifdef S_IFLNK
	case S_IFLNK:	bit[0]='l';	break;
# endif
	}
	rwx(sb->st_mode, bit+1);
	rwx(sb->st_mode<<3, bit+4);
	rwx(sb->st_mode<<6, bit+7);
	if (sb->st_mode&S_ISUID)	bit[3]='s';
	if (sb->st_mode&S_ISGID)	bit[6]='s';
	if (sb->st_mode&S_ISVTX)	bit[9]='t';
	printf("\"%s\"", bit);
    }
    /* times in human form, uppercase first letter */
    else if (equal("Ctime", f->f_name)) {
	printf("%.24s (%lu)", ctime(&sb->st_ctime), (u_long) sb->st_ctime);
	f[1].f_print= 0;
    }
    else if (equal("Mtime", f->f_name)) {
	printf("%.24s (%lu)", ctime(&sb->st_mtime), (u_long) sb->st_mtime);
	f[1].f_print= 0;
    }
    else if (equal("Atime", f->f_name)) {
	printf("%.24s (%lu)", ctime(&sb->st_atime), (u_long) sb->st_atime);
	f[1].f_print= 0;
    }
    else if (equal("ctime", f->f_name)) {
	printf("%lu", (u_long) sb->st_ctime);
    }
    else if (equal("mtime", f->f_name)) {
	printf("%lu", (u_long) sb->st_mtime);
    }
    else if (equal("atime", f->f_name)) {
	printf("%lu", (u_long) sb->st_atime);
    }
    else {
	switch (f->f_size) {
	case sizeof(char):
	    printf("%d", * (u_char *) f->f_addr);
	    break;
	case sizeof(short):
	    printf("%u", (u_int) * (u_short *) f->f_addr);
	    break;
#if INT_MAX != SHRT_MAX
	case sizeof(int):
	    printf("%u", * (u_int *) f->f_addr);
	    break;
#endif
#if LONG_MAX != INT_MAX && LONG_MAX != SHRT_MAX
	case sizeof(long):
	    printf("%lu", * (u_long *) f->f_addr);
	    break;
#endif
	default:
	    fprintf(stderr, "\nProgram error: bad '%s' field size %d\n", 
			    f->f_name, f->f_size);
	    break;
	}
    }
}