components/visual-panels/core/src/cmd/rad/mod/files/mod_files.c
author mahmood.ali@oracle.com <mahmood.ali@oracle.com>
Tue, 01 Apr 2014 11:11:03 -0700
branchs11-update
changeset 3037 ef46824e0e76
parent 2805 4888f6212f94
permissions -rw-r--r--
17605535 tmux manpage is corrupt. 18423046 Enable aslr in slang
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     1
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     2
 * CDDL HEADER START
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     3
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     7
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    11
 * and limitations under the License.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    12
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    18
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    19
 * CDDL HEADER END
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    20
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    21
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    22
/*
2805
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
    23
 * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    24
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    25
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    26
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    27
 * Unfortunately, the behavior this module has inherited is not one
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    28
 * of "get me information about file X or directory Y", but "tell me
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    29
 * what calling 'new File(X)' would do in Java".  This includes
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    30
 * nonsense like manufacturing correct fake data for nonexistent
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    31
 * files.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    32
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    33
 * This sorely needs to be ripped out and replaced with a sane
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    34
 * api.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    35
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    36
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    37
#include <sys/stat.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    38
#include <sys/types.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    39
#include <string.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    40
#include <stdio.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    41
#include <stdlib.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    42
#include <unistd.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    43
#include <time.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    44
#include <dirent.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    45
#include <libgen.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    46
#include <limits.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    47
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    48
#include <rad/adr.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    49
#include <rad/rad_modapi.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    50
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    51
#include "api_file.h"
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    52
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    53
static adr_data_t *
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    54
empty_file(adr_data_t *data, const char *apath, const char *cpath)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    55
{
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    56
	adr_struct_set(data, "absolutePath",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    57
	    adr_data_new_string(apath, LT_COPY));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    58
	adr_struct_set(data, "canonicalPath",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    59
	    adr_data_new_string(cpath, LT_COPY));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    60
	adr_struct_set(data, "canonical", adr_data_new_boolean(B_TRUE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    61
	adr_struct_set(data, "baseName", adr_data_new_string("", LT_COPY));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    62
	adr_struct_set(data, "exists", adr_data_new_boolean(B_FALSE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    63
	adr_struct_set(data, "readable", adr_data_new_boolean(B_FALSE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    64
	adr_struct_set(data, "writable", adr_data_new_boolean(B_FALSE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    65
	adr_struct_set(data, "hidden", adr_data_new_boolean(B_FALSE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    66
	adr_struct_set(data, "directory", adr_data_new_boolean(B_FALSE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    67
	adr_struct_set(data, "file", adr_data_new_boolean(B_FALSE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    68
	adr_struct_set(data, "lastModified", adr_data_new_time(0, 0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    69
	adr_struct_set(data, "length", adr_data_new_long(0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    70
	adr_struct_set(data, "freeSpace", adr_data_new_long(0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    71
	adr_struct_set(data, "totalSpace", adr_data_new_long(0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    72
	adr_struct_set(data, "usableSpace", adr_data_new_long(0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    73
	return (adr_data_purify(data));
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    74
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    75
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    76
static adr_data_t *
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    77
read_file(const char *path, const char *file)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    78
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    79
	struct stat64 st;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    80
	char apath[PATH_MAX] = "";
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    81
	char cpath[PATH_MAX] = "";
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    82
	const char *name = file != NULL ? file : path;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    83
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    84
	adr_data_t *data = adr_data_new_struct(&t__FileSnapshot);
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    85
	adr_struct_set(data, "path", adr_data_new_string(name, LT_COPY));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    86
	adr_struct_set(data, "absolute", adr_data_new_boolean(name[0] == '/'));
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    87
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    88
	if (path[0] != '/') {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    89
		if (getcwd(apath, PATH_MAX) == NULL) {
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    90
			adr_data_free(data);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    91
			return (NULL);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    92
		}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    93
		if (apath[1] != '\0')
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    94
			(void) strlcat(apath, "/", PATH_MAX);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    95
		(void) strlcat(apath, path, PATH_MAX);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    96
	} else {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    97
		(void) strlcpy(apath, path, PATH_MAX);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    98
	}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    99
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   100
	if (resolvepath(apath, cpath, PATH_MAX) == -1 ||
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   101
	    stat64(path, &st) == -1)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   102
		return (empty_file(data, apath, apath));
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   103
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   104
	adr_struct_set(data, "absolutePath",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   105
	    adr_data_new_string(apath, LT_COPY));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   106
	adr_struct_set(data, "canonicalPath",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   107
	    adr_data_new_string(cpath, LT_COPY));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   108
	adr_struct_set(data, "canonical",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   109
	    adr_data_new_boolean(strcmp(apath, cpath) == 0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   110
	adr_struct_set(data, "baseName",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   111
	    adr_data_new_string(basename(apath), LT_COPY));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   112
	adr_struct_set(data, "exists", adr_data_new_boolean(B_TRUE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   113
	adr_struct_set(data, "readable",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   114
	    adr_data_new_boolean(access(path, R_OK) == 0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   115
	adr_struct_set(data, "writable",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   116
	    adr_data_new_boolean(access(path, W_OK) == 0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   117
	adr_struct_set(data, "hidden", adr_data_new_boolean(B_FALSE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   118
	adr_struct_set(data, "directory",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   119
	    adr_data_new_boolean(S_ISDIR(st.st_mode)));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   120
	adr_struct_set(data, "file", adr_data_new_boolean(S_ISREG(st.st_mode)));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   121
	adr_struct_set(data, "lastModified", adr_data_new_time_ts(&st.st_mtim));
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   122
	/* XXX: 64-bitify */
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   123
	adr_struct_set(data, "length", adr_data_new_long(st.st_size));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   124
	adr_struct_set(data, "freeSpace", adr_data_new_long(0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   125
	adr_struct_set(data, "totalSpace", adr_data_new_long(0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   126
	adr_struct_set(data, "usableSpace", adr_data_new_long(0));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   127
	return (adr_data_purify(data));
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   128
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   129
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   130
/* ARGSUSED */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   131
conerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   132
interface_FileBrowser_read_roots(rad_instance_t *inst, adr_attribute_t *attr,
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   133
    adr_data_t **data, adr_data_t **error)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   134
{
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   135
	adr_data_t *result = adr_data_new_array(&t_array__FileSnapshot, 1);
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   136
	(void) adr_array_add(result, read_file("/", NULL));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   137
	*data = adr_data_purify(result);
2805
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   138
	return (CE_OK);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   139
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   140
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   141
/* ARGSUSED */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   142
conerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   143
interface_FileBrowser_invoke_getFile(rad_instance_t *inst, adr_method_t *meth,
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   144
    adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   145
{
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   146
	*ret = read_file(adr_data_to_string(args[0]), NULL);
2805
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   147
	return (CE_OK);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   148
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   149
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   150
/* ARGSUSED */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   151
conerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   152
interface_FileBrowser_invoke_getFiles(rad_instance_t *inst, adr_method_t *meth,
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   153
    adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   154
{
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   155
	const char *path = adr_data_to_string(args[0]);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   156
	DIR *d = opendir(path);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   157
	struct dirent *ent;
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   158
	adr_data_t *result;
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   159
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   160
	if (d == NULL)
2805
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   161
		return (CE_OBJECT);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   162
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   163
	result = adr_data_new_array(&t_array__FileSnapshot, 1);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   164
	while ((ent = readdir(d)) != NULL) {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   165
		char buf[PATH_MAX];
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   166
		if (strcmp(ent->d_name, ".") == 0 ||
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   167
		    strcmp(ent->d_name, "..") == 0)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   168
			continue;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   169
		int len = strlen(path);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   170
		while (len > 0 && path[len - 1] == '/')
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   171
			len--;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   172
		(void) snprintf(buf, PATH_MAX, "%.*s/%s", len, path,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   173
		    ent->d_name);
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   174
		adr_data_t *file = read_file(buf, NULL);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   175
		if (file != NULL)
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   176
			(void) adr_array_add(result, file);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   177
	}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   178
	(void) closedir(d);
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   179
	*ret = adr_data_purify(result);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   180
2805
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   181
	return (CE_OK);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   182
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   183
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   184
int
2805
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   185
_rad_init(void)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   186
{
2805
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   187
	adr_name_t *aname = adr_name_vcreate(
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   188
	    MOD_DOMAIN, 1, "type", "FileBrowser");
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   189
	conerr_t cerr =  rad_cont_insert_singleton(rad_container, aname,
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   190
	    &modinfo, &interface_FileBrowser_svr);
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   191
	adr_name_rele(aname);
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   192
	if (cerr != CE_OK) {
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   193
		rad_log(RL_ERROR, "(mod_files) failed to insert FileBrowser");
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   194
		return (-1);
2805
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   195
	}
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   196
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   197
	return (0);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   198
}
2805
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   199
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   200
/*
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   201
 * _rad_fini is called by the RAD daemon when the module is unloaded. Any
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   202
 * module finalisation is completed here.
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   203
 */
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   204
/*ARGSUSED*/
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   205
void
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   206
_rad_fini(void *unused)
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   207
{
4888f6212f94 17510631 Backport 16984138 to 11.2 - vp components must change to match RAD2 enhancements
devjani.ray@oracle.com <devjani.ray@oracle.com>
parents: 901
diff changeset
   208
}