HYD_status HYDU_send_strlist(int fd, char **strlist) { int i, list_len, len; int sent, closed; HYD_status status = HYD_SUCCESS; HYDU_FUNC_ENTER(); /* Check how many arguments we have */ list_len = HYDU_strlist_lastidx(strlist); status = HYDU_sock_write(fd, &list_len, sizeof(int), &sent, &closed, HYDU_SOCK_COMM_MSGWAIT); HYDU_ERR_POP(status, "unable to write data to proxy\n"); HYDU_ASSERT(!closed, status); /* Convert the string list to parseable data and send */ for (i = 0; strlist[i]; i++) { len = strlen(strlist[i]) + 1; status = HYDU_sock_write(fd, &len, sizeof(int), &sent, &closed, HYDU_SOCK_COMM_MSGWAIT); HYDU_ERR_POP(status, "unable to write data to proxy\n"); HYDU_ASSERT(!closed, status); status = HYDU_sock_write(fd, strlist[i], len, &sent, &closed, HYDU_SOCK_COMM_MSGWAIT); HYDU_ERR_POP(status, "unable to write data to proxy\n"); HYDU_ASSERT(!closed, status); } fn_exit: HYDU_FUNC_EXIT(); return status; fn_fail: goto fn_exit; }
HYD_status HYDU_list_append_strlist(char **src_strlist, char **dest_strlist) { int i, j; HYD_status status = HYD_SUCCESS; HYDU_FUNC_ENTER(); i = HYDU_strlist_lastidx(dest_strlist); for (j = 0; src_strlist[j]; j++) dest_strlist[i++] = HYDU_strdup(src_strlist[j]); dest_strlist[i++] = NULL; HYDU_FUNC_EXIT(); return status; }
HYD_status HYDU_strdup_list(char *src[], char **dest[]) { int i, count; HYD_status status = HYD_SUCCESS; HYDU_FUNC_ENTER(); count = HYDU_strlist_lastidx(src); HYDU_MALLOC(*dest, char **, (count + 1) * sizeof(char *), status); for (i = 0; i < count; i++) (*dest)[i] = HYDU_strdup(src[i]); (*dest)[i] = NULL; fn_exit: HYDU_FUNC_EXIT(); return status; fn_fail: goto fn_exit; }