Exemple #1
0
void getPath()
{
	int i, start = 0,j,k;
	int length = 0;
	
	char* ppath = getenv("PATH");
	
	int path_length = strlen(ppath);
	
	for (i=0;i<path_length;i++) {
	
		if (ppath[i] == ':') {
			Node* node = list_add_elem(&paths);
			node->data = malloc((length+1)*sizeof(char));
	
			if (node->data == NULL) { printf("Memory fault"); exit(1); }
	
			k = 0;
	
			for (j=start;j<i;j++) {
				node->data[k] = ppath[j];
				k++;
			}
	
			node->data[k] = '\0';
	
			length = 0;
			start = i + 1;
		} else length++;
	
	}
	
	Node* node = list_add_elem(&paths);
	node->data = malloc((length+1)*sizeof(char));
	
	if (node->data == NULL) { printf("Memory fault"); exit(1); }
	
	k = 0;
	
	for (j=start;j<path_length;j++) { //on traite le dernier path
		node->data[k] = ppath[j];
		k++;	
	}
	
	node->data[k] = '\0';
	flag_path = true;
	
	if (DEBUG) print_list(&paths);
}
Exemple #2
0
int iscsi_target_add_lu(
    struct iscsi_target *target,
    uint64 lun,
    char *pathname,
    enum volume_type type,
    uint64 capacity,
    uint32 sector_size,
    char *pathname_iotrace,
    void *data)
{
    struct volume *vol;
    int rv;

    vol = vol_create(target, lun, pathname, type, capacity, sector_size, pathname_iotrace, data);
    if (vol == NULL) {
	goto failure;
    }
    log_dbg1("Initialized LU %llu in target \"%s\".\n",
	     lun, target->name);

    rv = vol_run(vol);
    if (rv) {
	ASSERT((0), "NOT IMPLEMENTED YET\n");
    }

    list_add_elem(&(target->list_vol), &(vol->listelem));
    log_dbg3("target->list_vol.len = "U32_FMT"\n", target->list_vol.len);

    return 0;

failure:
    return -1;
} // iscsi_target_add_lu
Exemple #3
0
/**
 * Create iSCSI task
 * This function doesn't create iSCSI PDUs.
 */
struct iscsi_task *iscsi_create_task(struct iscsi_conn *conn, uint32 itt)
{
    struct iscsi_task *task;

    task = malloc_safe(sizeof(struct iscsi_task));
    if (task == NULL) {
	log_err("Unable to allocate memory (struct iscsi_task).\n");
    }

    // initialize
    task->conn = conn;

    task->itt = itt;

    list_init(&(task->list_pdu));

    list_init(&(task->list_page));
    task->page_totallen = 0;
    task->page_filled = 0;

    task->vol = NULL;
    
    task->ttt = 0xFFFFFFFF;
    task->datasn = 0;

    task->laptime.scsi_opcode = 0x00;

    listelem_init(&(task->listelem), task);
    list_add_elem(&(conn->list_task), &(task->listelem));
    
    log_dbg3("Created iSCSI task (itt=0x%08lX, conn->list_task.len="U32_FMT").\n",
	    task->itt, conn->list_task.len);
    return task;
} // iscsi_create_task
static inline void
histogram_add (DespeckleHistogram *hist,
               guchar              val,
               const guchar       *orig)
{
  hist->elems[val]++;
  list_add_elem (&hist->origs[val], orig);
}
Exemple #5
0
void* list_add_unique_elem(LIST *list, void *data, BOOL(*cmp_fn)(void*, void*)){
    int i;
    void *exist_data;
    for(i = 0; i < list->used_len; i++){
        exist_data = list_get_elem_by_idx(list, i);
        if(cmp_fn(exist_data, data)) return NULL;
    }
    return list_add_elem(list, data);
}
Exemple #6
0
int main()
{
  linkedlist list = create_list();
  init_list(list);
  list->next = malloc(sizeof(struct node));
  list->next->elem = 0;
  list->next->next = NULL;
  list_add_elem(list, list->next, 1);
  list_add_elem(list, list->next, 2);
  list_add_elem(list, list->next, 3);
  position result = find(list, 3);
  if (result != NULL)
    printf("find it: %d\n", result->elem);
  result = find(list, 5);
  if (result != NULL)
    printf("find it: %d\n", result->elem);

  list_print_all(list);
}
Exemple #7
0
tree_node_t *tree_add_elem(tree_node_t *root_node, void *data, int(cmp_func)(void*,void*,void*), void *cmp_data)
{
	tree_node_t *old_node_ptr=root_node;
	tree_node_t *node_ptr=root_node;
	int i;

	while(node_ptr!=NULL)
	{
		if((i=cmp_func(data,node_ptr->list->data,cmp_data))>0)
		{
			old_node_ptr=node_ptr;
			node_ptr=node_ptr->left;
		}
		else if(i<0)
		{
			old_node_ptr=node_ptr;
			node_ptr=node_ptr->right;
		}
		else
		{
			node_ptr->list=list_add_elem(node_ptr->list, data);
			return node_ptr;
		}
	}

	node_ptr=calloc(1,sizeof(tree_node_t));
	node_ptr->list=list_add_elem(NULL, data);

	if(root_node!=NULL)
	{
		if(i>0)
		{
			old_node_ptr->left=node_ptr;
		}
		else
		{
			old_node_ptr->right=node_ptr;
		}
	}

	return node_ptr;
}
Exemple #8
0
/**
 * Bind an iSCSI connection to an iSCSI session.
 * (If an iSCSI session is not exist, create an iSCSI session)
 */
int iscsi_bind_connection(
    const char *target_name,
    union iscsi_sid sid,
    struct iscsi_conn *conn)
{
    struct iscsi_target *target = NULL;
    struct iscsi_session *session = NULL;
    int rv = 0;

    ASSERT((conn != NULL), "conn == NULL\n");
    ASSERT((conn->siso != NULL), "conn->siso == NULL\n");
    ASSERT((conn->session == NULL), "conn->session != NULL\n");
    ASSERT((conn->target == NULL), "conn->target != NULL\n");

    log_dbg1("target_name=%s\n", target_name);
    target = siso_lookup_target(conn->siso, target_name);
    if (target == NULL) {
	return -ENOENT;
    }
    conn->target = target;
    
    LOCK_SESSIONS(target);
    {
	session = lookup_session(target, conn->sid);

	if (conn->sid.id.tsih[0] == 0x00 || conn->sid.id.tsih[1] == 0x00) {
	    // Create session and attach connection to the session.
	    ASSERT((session == NULL), "session != NULL\n");
	    log_dbg1("create iscsi session\n");
	    session = iscsi_create_session(target, sid, conn);
	    if (session == NULL) {
		rv = -ENOMEM;
		goto done;
	    }
	    log_dbg1("conn->session=%p\n", conn->session);
	    // Enlink this iSCSI session to iSCSI session list.
	    list_add_elem(&(target->list_session), &(session->listelem));
	} else {
	    // Current implementation doesn't support multi-connection.
	    log_err("Current implementation doesn't support multi-connection.\n");
	    rv = -EINVAL;
	}
    }
done:
    UNLOCK_SESSIONS(target);

    if (!rv) {
	// detach iSCSI connection from tempolary list.
	siso_detach_connection(conn->siso, conn);
    }

    return rv;
} // iscsi_bind_connection
Exemple #9
0
/* Non utilisee */
void addPath(char *new_path, List *list) 
{
	int length = strlen(new_path);
	printf("%d\n",length);
	Node* node = list_add_elem(&paths);
	node->data = malloc((length+1)*sizeof(char));
	
	if (node->data == NULL) { printf("Memory fault\n"); exit(1); }
	
	node->data = ".\0";
	
	if (DEBUG) print_list(&paths);
}
Exemple #10
0
/**
 * Create an iSCSI session and bind an iSCSI connection.
 */
struct iscsi_session *iscsi_create_session(
    struct iscsi_target *target,
    union iscsi_sid sid,
    struct iscsi_conn *conn)
{
    ASSERT((target != NULL), "target == NULL\n");
    ASSERT((conn != NULL), "conn == NULL\n");

    struct iscsi_session *session;
    uint16 tsih;

    session = malloc_safe(sizeof(struct iscsi_session));
    if (session == NULL) {
	goto failure;
    }
    listelem_init(&(session->listelem), session);
    list_init(&(session->list_conn));
    pthread_mutex_init(&(session->lock_list_conn), NULL);

    session->target = target;

    // Get TSIH and set.
    ASSERT((conn->sid.id.tsih[0] == 0x00 && conn->sid.id.tsih[1] == 0x00),
	   "conn->sid.id.tsih[0] != 0x00 || conn->sid.id.tsih[1] != 0x00\n");
    ASSERT((target->siso != NULL), "target->siso == NULL\n");
    conn->sid.id64 = sid.id64;
    tsih = siso_get_tsih(target->siso);
    log_dbg1("tsih=0x%04X\n", tsih);
    conn->sid.id.tsih[0] = (tsih >> 8);
    conn->sid.id.tsih[1] = (tsih & 0xFF);
    session->sid = conn->sid;

    LOCK_CONNS(session);
    {
	// enlist iSCSI connection to this iSCSI session.
	list_add_elem(&(session->list_conn), &(conn->listelem_session));
    }
    UNLOCK_CONNS(session);

    conn->session = session;

    return session;
failure:
    return NULL;
} // iscsi_create_session
Exemple #11
0
/*
 * add PDU to task.
 */
int iscsi_add_pdu_to_task(struct iscsi_conn *conn, struct iscsi_task *task, struct iscsi_pdu *pdu)
{
    pdu->task = task;

    list_add_elem(&(task->list_pdu), &(pdu->listelem_task));

    log_dbg3("-----\n");
    log_dbg3("Add PDU (pdu->{opcode=0x%02X, itt=0x%08lX}, task->list_pdu.len="U32_FMT").\n",
	    pdu->opcode, pdu->itt, task->list_pdu.len);
    do_each_list_elem(struct iscsi_pdu *, &(task->list_pdu), pdu, listelem_task) {
	log_dbg3("&(pdu->listelem_task) = %p\n", &(pdu->listelem_task));
	log_dbg3("pdu->listelem_task.next = %p\n", pdu->listelem_task.next);
	log_dbg3("pdu->listelem_task.prev = %p\n", pdu->listelem_task.prev);
	log_dbg3("pdu->listelem_task.body = %p\n", pdu->listelem_task.body);
	ASSERT((pdu->listelem_task.next != NULL), "pdu->listelem_task.next == NULL\n");
	ASSERT((pdu->listelem_task.prev != NULL), "pdu->listelem_task.prev == NULL\n");
	iscsi_dump_pdu(conn, pdu);
    } while_each_list_elem(struct iscsi_pdu *, &(task->list_pdu), pdu, listelem_task);

    log_dbg3("-----\n");

    return 0;
} // iscsi_add_pdu_to_task
Exemple #12
0
void* stack_push(STACK *stack, void *data){
    return list_add_elem((LIST*)stack, data);
}
Exemple #13
0
void changePath(char *ppath)
{
	
	int start = 5,i,j,k;
	int length = 0;
	int path_length = strlen(ppath);
	Node* node;	
	if(flag_path == true && paths.begin != NULL) freeList(&paths);
	
	for (i=5;i<path_length;i++) {
		if (i == path_length-1 && ppath[i] == ':') {
			node = list_add_elem(&paths);
			node->data = malloc((length+1)*sizeof(char));
	
			if (node->data == NULL) { printf("Memory fault\n"); exit(1); }
	
			k = 0;
	
			for (j=start;j<i;j++) {
				node->data[k] = ppath[j];
				k++;
			}
			
			node->data[k] = '\0';
			length = 0;
			start = i + 1;
			node = list_add_elem(&paths);
			node->data = malloc((2)*sizeof(char));
			node->data[0] = '.';
			node->data[1] = '\0';
		} 
		else if (ppath[i] == ':') {
			node = list_add_elem(&paths);
			node->data = malloc((length+1)*sizeof(char));
	
			if (node->data == NULL) { printf("Memory fault\n"); exit(1); }
	
			k = 0;
	
			for (j=start;j<i;j++) {
				node->data[k] = ppath[j];
				k++;
			}
			
			node->data[k] = '\0';
			length = 0;
			start = i + 1;
		}
		else length++;
	}

	if (ppath[path_length-1] != ':') {
		node = list_add_elem(&paths);
		node->data = malloc((length+1)*sizeof(char));
	
		if (node->data == NULL) { printf("Memory fault\n"); exit(1); }
	
		k = 0;
		for (j=start;j<path_length;j++) { //on traite le dernier path
			node->data[k] = ppath[j];
			k++;	
		}
		node->data[k] = '\0';
	}
	flag_path_change = true;
	
	if (DEBUG) print_list(&paths);
}
Exemple #14
0
void list_add_pointer(LIST_TP list, void* pointer_add) {
	LIST_ELEM_TP elem_add = (LIST_ELEM_TP) malloc(sizeof(LIST_ELEM_T));
	elem_add->int_elem = -1;
	elem_add->pointer_elem = pointer_add;
	list_add_elem(list, elem_add);
}
Exemple #15
0
void list_add_int(LIST_TP list, int int_add) {
	LIST_ELEM_TP elem_add = (LIST_ELEM_TP) malloc(sizeof(LIST_ELEM_T));
	elem_add->int_elem = int_add;
	elem_add->pointer_elem = NULL;
	list_add_elem(list, elem_add);
}