Esempio n. 1
0
int
cmd_help (Shell *shell, void *args)
{
	if (array_is_empty (args))
	{
		printf ("Available commands:\n");

		const Array *a = shell_get_commands (shell);
		for (size_t i = 0, n = array_get_size (a); i < n; ++i)
		{
			const command_t *command = array_get (a, i);
			printf ("  %s\n", command->name);

		}
		return 0;
	}

	int return_value = 0;
	for (size_t i = 0, n = array_get_size (args); i < n; ++i)
	{
		const char *name = array_get (args, i);
		const command_t *p = shell_get_command (shell, name);
		if (!p) // Command not found.
		{
			fprintf (stderr, "No command \"%s\" found.\n", name);
			--return_value;
		}
		else
		{
			printf ("- %s: %s", name, name);
			if (p->args_list)
			{
				printf (" %s", p->args_list);
			}
			printf ("\n  ");
			if (p->help)
			{
				printf ("%s", p->help);
			}
			else
			{
				printf ("%s", "No help available for this command.");
			}
			printf ("\n");
		}
	}
	return return_value;
}
Esempio n. 2
0
/*
 * Print info about variable: php var_dump()
 */
void php_var_dump(PHP_VALUE_NODE *node, int ident, int ref)
{
	for(int i = 0; i < ident;i++) {
		printf("\t");
	}
	if ( ref ) printf("&");
	switch(node->type) {
		case PHP_VAL_BOOL: printf("bool(%s)\n", node->int_val ? "true" : "false"); break;
		case PHP_VAL_INT: printf("int(%"PRIu64")\n", node->int_val); break;
		case PHP_VAL_FLOAT: printf("float(%f)\n", node->float_val); break;
		case PHP_VAL_STRING: printf("string(%d) \"%s\"\n", (int)strlen(node->str_val), node->str_val); break;
		case PHP_VAL_OBJECT: printf("Object(%s)\n", node->obj_val.class_name); break;
		case PHP_VAL_ARRAY: {
			int arr_size = array_get_size(node);
			printf("array(%d) {\n", arr_size);
			for(int i = 0; i < arr_size;i++) {
				const std::string &curr_key = array_get_ith_key(node, i);
				PHP_VAR_NODE *curr_val = array_get_by_str_key(node, curr_key);
				printf("\t[%s]=>\n", curr_key.c_str());
				php_var_dump(&curr_val->value, ident+1, curr_val->ref_count > 1);
			}
			for(int i = 0; i < ident;i++) {
				printf("\t");
			}
			printf("}\n");
			break;
		}
		case PHP_VAL_NONE: printf("NULL\n"); break;
		case PHP_VAL_VAR_NODE:
		case PHP_VAL_INT_DATA: assert(0); break;
	}
}
Esempio n. 3
0
size_t array_append_element(Array * arr, Element * elem)
{
	assert(arr != NULL);
	assert(elem);
	if (arr == NULL || elem == NULL)
		return 0;
	return array_add_element(arr, array_get_size(arr), elem);
}
int stack_is_empty(object store, string name)
{
    int size=array_get_size(store,name);

    if (size==1 || size==0)
        return TRUE;
    else
        return FALSE;
}
Esempio n. 5
0
File: route.c Progetto: csko/yaosp
route_t* route_find_device( char* dev_name ) {
    int i;
    int size;
    route_t* route;
    net_device_t* device;

    mutex_lock( route_mutex, LOCK_IGNORE_SIGNAL );

    size = array_get_size(&device_routes);

    for ( i = 0; i < size; i++ ) {
        route_t* tmp;

        tmp = (route_t*)array_get_item( &device_routes, i );

        if ( tmp->device == NULL ) {
            kprintf( ERROR, "route_find_device(): found device route without a valid network device!\n" );
            continue;
        }

        if ( strcmp( tmp->device->name, dev_name ) == 0 ) {
            tmp->ref_count++;
            route = tmp;
            goto out;
        }
    }

    device = net_device_get(dev_name);

    if ( device == NULL ) {
        route = NULL;
        goto out;
    }

    route = route_create( device->ip_addr, device->netmask, NULL, RTF_UP );

    if ( route == NULL ) {
        net_device_put(device);
        goto out;
    }

    /* NOTE: we don't have to put the net_device_t later as we assign
             the device to the newly created route entry. */

    route->device = device;

    route_insert( &device_routes, route );

 out:
    mutex_unlock( route_mutex );

    return route;
}
Esempio n. 6
0
void save_session_vars(std::map<std::string, std::string> &varmap)
{
	PHP_EXP_NODE *sess_vars_exp_node = get_var_node("_SESSION");
	PHP_VAR_NODE *sess_vars = sess_vars_exp_node->var_si_node->var;

	delete sess_vars_exp_node;
	if ( sess_vars->value.type != PHP_VAL_ARRAY ) {
		return;
	}

	for(int i = 0; i < array_get_size(&sess_vars->value); i++) {
		std::string s = array_get_ith_key(&sess_vars->value, i);
		PHP_VAR_NODE *var = array_get_by_str_key(&sess_vars->value, s);
		cast_value_str(&var->value);
		varmap[s] = var->value.str_val;
	}
}
Esempio n. 7
0
void php_native_count(PHP_VALUE_NODE *result)
{
	PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0");
	if ( si ) {
		PHP_VALUE_NODE *param = &si->var->value;
		if ( result ) {
			cast_value_dnum(result);
			if ( (si->var->value.type == PHP_VAL_NONE) || (si->var->value.type != PHP_VAL_ARRAY) ) {
				result->int_val = 0;
			} else {
				result->int_val = array_get_size(param);
			}
		}
	} else {
		php_report_error(PHP_ERROR, "Invalid or missing argument");
	}
}
Esempio n. 8
0
int
cmd_setenv (Shell *shell, void *args)
{
	if (array_is_empty (args))
	{
		char **p = environ;
		while (*p)
		{
			printf ("%s\n", *p);
			++p;
		}
	}
	else
	{
		for (size_t i = 0, n = array_get_size (args); i < n; ++i)
		{
			putenv (strdup (array_get (args, i)));
		}
	}

	return 0;
}
Esempio n. 9
0
uint deps_add_evr(struct deps *deps, const char *name, int flags, uint epoch,
		const char *version, const char *release) {
	uint i, iter = 0, hash, size = array_get_size(&deps->names), ver, rel, nam;

	nam = strings_add(deps->strings, name);
	ver = strings_add(deps->strings, version != NULL ? version : "");
	rel = strings_add(deps->strings, release != NULL ? release : "");

	if (hashtable_resize(&deps->hashtable)) {
		for (i = 0; i < size; i++) {
			hash = dephash(array_get(&deps->names, i));
			hashtable_add(&deps->hashtable, i, hash);
		}
	}

	hash = dephash(nam);

	while ((i = hashtable_find(&deps->hashtable, hash, &iter)) != -1)
		if (array_get(&deps->names, i) == nam &&
				array_get(&deps->epochs, i) == epoch &&
				array_get(&deps->vers, i) == ver &&
				array_get(&deps->rels, i) == rel &&
				array_get(&deps->flags, i) == flags)
			break;
	if (i != -1)
		/* already stored */
		return i;

	i = size;
	array_set(&deps->names, i, nam);
	array_set(&deps->epochs, i, epoch);
	array_set(&deps->vers, i, ver);
	array_set(&deps->rels, i, rel);
	array_set(&deps->flags, i, flags);
	hashtable_add_dir(&deps->hashtable, i, hash, iter);

	return i;
}
Esempio n. 10
0
File: route.c Progetto: csko/yaosp
static int route_insert( array_t* route_table, route_t* route ) {
    int i;
    int size;

    /* TODO: check if the same route already exists. */

    size = array_get_size(route_table);

    for ( i = 0; i < size; i++ ) {
        route_t* tmp;

        tmp = (route_t*)array_get_item( route_table, i );

        if ( route->mask_bits >= tmp->mask_bits ) {
            break;
        }
    }

    route->ref_count++;
    array_insert_item( route_table, i, route );

    return 0;
}
Esempio n. 11
0
int main(int argc, char *argv[])
{
	Array *myArray = array_init();
	Element *p;

	assert(myArray);
	size_t size = array_get_size(myArray);

	assert(size == 0);
	int i;

	for (i = 0; i < 1000; ++i) {
		Element *p = new_element(i);

		array_append_element(myArray, p);
		free(p);
	}
	p = new_element(10);
	array_add_element(myArray, 0, p);
	assert(myArray->size == 1001);
	free(p);
	assert(strcmp(myArray->elem[0].test, "ms0:/music/test10.mp3") == 0);
	assert(strcmp(myArray->elem[1].test, "ms0:/music/test0.mp3") == 0);
	assert(strcmp(myArray->elem[10].test, "ms0:/music/test9.mp3") == 0);
	assert(strcmp(myArray->elem[1000].test, "ms0:/music/test999.mp3") == 0);
	assert(myArray->size <= myArray->capable);
	array_del_element(myArray, 0);
	assert(strcmp(myArray->elem[0].test, "ms0:/music/test0.mp3") == 0);
	array_del_element(myArray, 1);
	assert(strcmp(myArray->elem[1].test, "ms0:/music/test2.mp3") == 0);
	array_del_element(myArray, 998);
	assert(strcmp
		   (myArray->elem[array_get_size(myArray) - 1].test,
			"ms0:/music/test998.mp3") == 0);

	while (array_get_size(myArray)) {
		array_del_element(myArray, 0);
	}
	assert(myArray->size == 0);

	int findpos = array_find_element_by_func(myArray, find_path_name,
											 "ms0:/music/test445.mp3");

	assert(findpos < 0);

	for (i = 0; i < 1000; ++i) {
		Element *p = new_element(i);

		array_append_element(myArray, p);
		free(p);
	}

	findpos =
		array_find_element_by_func(myArray, find_path_name,
								   "ms0:/music/test445.mp3");
	assert(findpos == 445);

	array_swap_element(myArray, 0, 1);
	assert(strcmp(myArray->elem[0].test, "ms0:/music/test1.mp3") == 0);
	assert(strcmp(myArray->elem[1].test, "ms0:/music/test0.mp3") == 0);

	assert(array_swap_element(myArray, 0, 1000) == 0);

	array_free(myArray);
	return 0;
}
Esempio n. 12
0
File: route.c Progetto: csko/yaosp
int route_get_table( struct rttable* table ) {
    int i;
    int size;
    int count;
    int remaining;
    struct rtabentry* entry;

    entry = (struct rtabentry*)( table + 1 );
    remaining = table->rtt_count;
    table->rtt_count = 0;

    /* Static routes */

    mutex_lock( route_mutex, LOCK_IGNORE_SIGNAL );

    size = array_get_size(&static_routes);

    for ( i = 0; ( i < size ) && ( remaining > 0 ); i++, entry++, remaining--, table->rtt_count++ ) {
        route_t* tmp;
        struct sockaddr_in* addr;

        tmp = (route_t*)array_get_item( &static_routes, i );

        addr = (struct sockaddr_in*)&entry->rt_dst;
        IP_COPY_ADDR( &addr->sin_addr, tmp->network_addr );
        addr = (struct sockaddr_in*)&entry->rt_genmask;
        IP_COPY_ADDR( &addr->sin_addr, tmp->network_mask );
        addr = (struct sockaddr_in*)&entry->rt_gateway;
        IP_COPY_ADDR( &addr->sin_addr, tmp->gateway_addr );
        entry->rt_flags = tmp->flags;

        if ( tmp->device != NULL ) {
            strncpy( entry->rt_dev, tmp->device->name, 64 );
            entry->rt_dev[63] = 0;
        } else {
            entry->rt_dev[0] = 0;
        }
    }

    mutex_unlock( route_mutex );

    /* Network interface routes */

    count = net_device_get_count();

    for ( i = 0;
          ( i < count ) && ( remaining > 0 );
          i++ ) {
        net_device_t* device;
        struct sockaddr_in* addr;

        device = net_device_get_nth(i);

        if ( ( net_device_flags(device) & NETDEV_UP ) == 0 ) {
            net_device_put(device);
            continue;
        }

        entry->rt_flags = RTF_UP;

        addr = (struct sockaddr_in*)&entry->rt_dst;
        IP_COPY_ADDR_MASKED( &addr->sin_addr, device->ip_addr, device->netmask );
        addr = (struct sockaddr_in*)&entry->rt_genmask;
        IP_COPY_ADDR( &addr->sin_addr, device->netmask );

        strncpy( entry->rt_dev, device->name, 64 );
        entry->rt_dev[63] = 0;

        entry++;
        remaining--;
        table->rtt_count++;

        net_device_put(device);
    }

    return 0;
}
Esempio n. 13
0
File: route.c Progetto: csko/yaosp
route_t* route_find( uint8_t* ipv4_addr ) {
    int i;
    int size;
    route_t* route;
    route_t* found;
    net_device_t* device;

    mutex_lock( route_mutex, LOCK_IGNORE_SIGNAL );

    /* Find a device that has a suitable address and netmask to send the packet. */

    device = net_device_get_by_address(ipv4_addr);

    if ( device != NULL ) {
        route = route_create( device->ip_addr, device->netmask, NULL, RTF_UP );

        if ( route != NULL ) {
            route->device = device;
        }

        goto out;
    }

    /* Try to find a suitable static route. */

    size = array_get_size(&static_routes);
    found = NULL;

    for ( i = 0; i < size; i++ ) {
        route_t* tmp;

        tmp = (route_t*)array_get_item( &static_routes, i );

        if ( IP_EQUALS_MASKED( tmp->network_addr, ipv4_addr, tmp->network_mask ) ) {
            found = tmp;
            break;
        }
    }

    /* If nothing is found, or the found
       route is not a gateway then we failed. */

    if ( ( found == NULL ) ||
         ( ( found->flags & RTF_GATEWAY ) == 0 ) ) {
        route = NULL;
        goto out;
    }

    /* Find a network interface for the gateway address. */

    device = net_device_get_by_address(found->gateway_addr);

    if ( device == NULL ) {
        route = NULL;
        goto out;
    }

    /* Clone the original route and assign the network device to it. */

    route = route_clone(found);

    if ( route == NULL ) {
        goto out;
    }

    route->device = device;

 out:
    mutex_unlock( route_mutex );

    return route;
}