Changeset 89ac5513 in mainline for uspace/lib/c/generic
- Timestamp:
- 2013-06-23T19:54:53Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ddb1922
- Parents:
- 3abf0760 (diff), 96cbd18 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/lib/c/generic
- Files:
-
- 2 added
- 11 edited
-
device/hw_res_parsed.c (modified) (1 diff)
-
dnsr.c (added)
-
inet.c (modified) (3 diffs)
-
inet/addr.c (added)
-
inetcfg.c (modified) (4 diffs)
-
inetping.c (modified) (2 diffs)
-
iplink.c (modified) (4 diffs)
-
iplink_srv.c (modified) (5 diffs)
-
mem.c (modified) (1 diff)
-
net/inet.c (modified) (2 diffs)
-
net/socket_client.c (modified) (5 diffs)
-
net/socket_parse.c (modified) (1 diff)
-
str.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/device/hw_res_parsed.c
r3abf0760 r89ac5513 188 188 hw_resource_list_t hw_resources; 189 189 hw_res_list_parsed_clean(hw_res_parsed); 190 bzero(&hw_resources, sizeof(hw_resource_list_t));190 memset(&hw_resources, 0, sizeof(hw_resource_list_t)); 191 191 192 192 int rc = hw_res_get_resource_list(sess, &hw_resources); -
uspace/lib/c/generic/inet.c
r3abf0760 r89ac5513 107 107 int inet_send(inet_dgram_t *dgram, uint8_t ttl, inet_df_t df) 108 108 { 109 async_exch_t *exch = async_exchange_begin(inet_sess); 110 109 uint32_t src; 110 int rc = inet_addr_pack(&dgram->src, &src); 111 if (rc != EOK) 112 return rc; 113 114 uint32_t dest; 115 rc = inet_addr_pack(&dgram->dest, &dest); 116 if (rc != EOK) 117 return EOK; 118 119 async_exch_t *exch = async_exchange_begin(inet_sess); 120 111 121 ipc_call_t answer; 112 aid_t req = async_send_5(exch, INET_SEND, dgram->src.ipv4, 113 dgram->dest.ipv4, dgram->tos, ttl, df, &answer); 114 int rc = async_data_write_start(exch, dgram->data, dgram->size); 115 async_exchange_end(exch); 116 122 aid_t req = async_send_5(exch, INET_SEND, (sysarg_t) src, 123 (sysarg_t) dest, dgram->tos, ttl, df, &answer); 124 rc = async_data_write_start(exch, dgram->data, dgram->size); 125 126 async_exchange_end(exch); 127 117 128 if (rc != EOK) { 118 129 async_forget(req); 119 130 return rc; 120 131 } 121 132 122 133 sysarg_t retval; 123 134 async_wait_for(req, &retval); 124 135 if (retval != EOK) 125 136 return retval; 126 137 127 138 return EOK; 128 139 } … … 130 141 int inet_get_srcaddr(inet_addr_t *remote, uint8_t tos, inet_addr_t *local) 131 142 { 143 uint32_t remote_addr; 144 int rc = inet_addr_pack(remote, &remote_addr); 145 if (rc != EOK) 146 return rc; 147 148 async_exch_t *exch = async_exchange_begin(inet_sess); 149 132 150 sysarg_t local_addr; 133 async_exch_t *exch = async_exchange_begin(inet_sess); 134 135 int rc = async_req_2_1(exch, INET_GET_SRCADDR, remote->ipv4, 151 rc = async_req_2_1(exch, INET_GET_SRCADDR, (sysarg_t) remote_addr, 136 152 tos, &local_addr); 137 async_exchange_end(exch); 138 139 if (rc != EOK) 140 return rc; 141 142 local->ipv4 = local_addr; 153 154 async_exchange_end(exch); 155 156 if (rc != EOK) 157 return rc; 158 159 inet_addr_unpack(local_addr, local); 143 160 return EOK; 144 161 } … … 148 165 int rc; 149 166 inet_dgram_t dgram; 150 151 dgram.src.ipv4 = IPC_GET_ARG1(*call);152 dgram.dest.ipv4 = IPC_GET_ARG2(*call);167 168 inet_addr_unpack(IPC_GET_ARG1(*call), &dgram.src); 169 inet_addr_unpack(IPC_GET_ARG2(*call), &dgram.dest); 153 170 dgram.tos = IPC_GET_ARG3(*call); 154 171 -
uspace/lib/c/generic/inetcfg.c
r3abf0760 r89ac5513 136 136 sysarg_t link_id, sysarg_t *addr_id) 137 137 { 138 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 139 140 ipc_call_t answer; 141 aid_t req = async_send_3(exch, INETCFG_ADDR_CREATE_STATIC, naddr->ipv4, 142 naddr->bits, link_id, &answer); 138 uint32_t naddr_addr; 139 uint8_t naddr_bits; 140 int rc = inet_naddr_pack(naddr, &naddr_addr, &naddr_bits); 141 if (rc != EOK) 142 return rc; 143 144 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 145 146 ipc_call_t answer; 147 aid_t req = async_send_3(exch, INETCFG_ADDR_CREATE_STATIC, 148 (sysarg_t) naddr_addr, (sysarg_t) naddr_bits, link_id, &answer); 143 149 sysarg_t retval = async_data_write_start(exch, name, str_size(name)); 144 145 async_exchange_end(exch); 146 147 if (retval != EOK) { 148 async_forget(req); 149 return retval; 150 } 151 150 151 async_exchange_end(exch); 152 153 if (retval != EOK) { 154 async_forget(req); 155 return retval; 156 } 157 152 158 async_wait_for(req, &retval); 153 159 *addr_id = IPC_GET_ARG1(answer); 154 160 155 161 return retval; 156 162 } … … 196 202 assert(act_size <= LOC_NAME_MAXLEN); 197 203 name_buf[act_size] = '\0'; 198 199 ainfo->naddr.ipv4 = IPC_GET_ARG1(answer);200 ainfo->naddr.bits = IPC_GET_ARG2(answer);204 205 inet_naddr_unpack(IPC_GET_ARG1(answer), IPC_GET_ARG2(answer), 206 &ainfo->naddr); 201 207 ainfo->ilink = IPC_GET_ARG3(answer); 202 208 ainfo->name = str_dup(name_buf); … … 284 290 inet_addr_t *router, sysarg_t *sroute_id) 285 291 { 286 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 287 292 uint32_t dest_addr; 293 uint8_t dest_bits; 294 int rc = inet_naddr_pack(dest, &dest_addr, &dest_bits); 295 if (rc != EOK) 296 return rc; 297 298 uint32_t router_addr; 299 rc = inet_addr_pack(router, &router_addr); 300 if (rc != EOK) 301 return rc; 302 303 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 304 288 305 ipc_call_t answer; 289 306 aid_t req = async_send_3(exch, INETCFG_SROUTE_CREATE, 290 dest->ipv4, dest->bits, router->ipv4, &answer); 307 (sysarg_t) dest_addr, (sysarg_t) dest_bits, (sysarg_t) router_addr, 308 &answer); 291 309 sysarg_t retval = async_data_write_start(exch, name, str_size(name)); 292 293 async_exchange_end(exch); 294 295 if (retval != EOK) { 296 async_forget(req); 297 return retval; 298 } 299 310 311 async_exchange_end(exch); 312 313 if (retval != EOK) { 314 async_forget(req); 315 return retval; 316 } 317 300 318 async_wait_for(req, &retval); 301 319 *sroute_id = IPC_GET_ARG1(answer); 302 320 303 321 return retval; 304 322 } … … 345 363 name_buf[act_size] = '\0'; 346 364 347 srinfo->dest.ipv4 = IPC_GET_ARG1(answer);348 srinfo->dest.bits = IPC_GET_ARG2(answer);349 srinfo->router.ipv4 = IPC_GET_ARG3(answer);365 inet_naddr_unpack(IPC_GET_ARG1(answer), IPC_GET_ARG2(answer), 366 &srinfo->dest); 367 inet_addr_unpack(IPC_GET_ARG3(answer), &srinfo->router); 350 368 srinfo->name = str_dup(name_buf); 351 369 -
uspace/lib/c/generic/inetping.c
r3abf0760 r89ac5513 79 79 { 80 80 async_exch_t *exch = async_exchange_begin(inetping_sess); 81 81 82 82 ipc_call_t answer; 83 aid_t req = async_send_3(exch, INETPING_SEND, sdu->src.ipv4,84 sdu->dest.ipv4, sdu->seq_no, &answer);83 aid_t req = async_send_3(exch, INETPING_SEND, (sysarg_t) sdu->src, 84 (sysarg_t) sdu->dest, sdu->seq_no, &answer); 85 85 sysarg_t retval = async_data_write_start(exch, sdu->data, sdu->size); 86 86 87 87 async_exchange_end(exch); 88 88 89 89 if (retval != EOK) { 90 90 async_forget(req); 91 91 return retval; 92 92 } 93 93 94 94 async_wait_for(req, &retval); 95 95 return retval; 96 96 } 97 97 98 int inetping_get_srcaddr( inet_addr_t *remote, inet_addr_t *local)98 int inetping_get_srcaddr(uint32_t remote, uint32_t *local) 99 99 { 100 async_exch_t *exch = async_exchange_begin(inetping_sess); 101 100 102 sysarg_t local_addr; 101 async_exch_t *exch = async_exchange_begin(inetping_sess); 102 103 int rc = async_req_1_1(exch, INETPING_GET_SRCADDR, remote->ipv4, 103 int rc = async_req_1_1(exch, INETPING_GET_SRCADDR, (sysarg_t) remote, 104 104 &local_addr); 105 105 106 async_exchange_end(exch); 106 107 107 108 if (rc != EOK) 108 109 return rc; 109 110 local->ipv4 =local_addr;110 111 *local = (uint32_t) local_addr; 111 112 return EOK; 112 113 } … … 114 115 static void inetping_ev_recv(ipc_callid_t callid, ipc_call_t *call) 115 116 { 116 int rc;117 117 inetping_sdu_t sdu; 118 119 sdu.src .ipv4= IPC_GET_ARG1(*call);120 sdu.dest .ipv4= IPC_GET_ARG2(*call);118 119 sdu.src = IPC_GET_ARG1(*call); 120 sdu.dest = IPC_GET_ARG2(*call); 121 121 sdu.seq_no = IPC_GET_ARG3(*call); 122 123 rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size);122 123 int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size); 124 124 if (rc != EOK) { 125 125 async_answer_0(callid, rc); 126 126 return; 127 127 } 128 128 129 129 rc = inetping_ev_ops->recv(&sdu); 130 130 free(sdu.data); -
uspace/lib/c/generic/iplink.c
r3abf0760 r89ac5513 39 39 #include <errno.h> 40 40 #include <inet/iplink.h> 41 #include <inet/addr.h> 41 42 #include <ipc/iplink.h> 42 43 #include <ipc/services.h> … … 83 84 { 84 85 async_exch_t *exch = async_exchange_begin(iplink->sess); 85 86 86 87 ipc_call_t answer; 87 aid_t req = async_send_2(exch, IPLINK_SEND, sdu->lsrc.ipv4,88 sdu->ldest.ipv4, &answer);88 aid_t req = async_send_2(exch, IPLINK_SEND, (sysarg_t) sdu->lsrc, 89 (sysarg_t) sdu->ldest, &answer); 89 90 int rc = async_data_write_start(exch, sdu->data, sdu->size); 91 90 92 async_exchange_end(exch); 91 93 92 94 if (rc != EOK) { 93 95 async_forget(req); 94 96 return rc; 95 97 } 96 98 97 99 sysarg_t retval; 98 100 async_wait_for(req, &retval); 99 101 if (retval != EOK) 100 102 return retval; 101 103 102 104 return EOK; 103 105 } … … 118 120 } 119 121 120 int iplink_addr_add(iplink_t *iplink, i plink_addr_t *addr)122 int iplink_addr_add(iplink_t *iplink, inet_addr_t *addr) 121 123 { 124 uint32_t addr_addr; 125 int rc = inet_addr_pack(addr, &addr_addr); 126 if (rc != EOK) 127 return rc; 128 122 129 async_exch_t *exch = async_exchange_begin(iplink->sess); 123 124 int rc = async_req_1_0(exch, IPLINK_ADDR_ADD, (sysarg_t)addr->ipv4); 130 rc = async_req_1_0(exch, IPLINK_ADDR_ADD, (sysarg_t) addr_addr); 125 131 async_exchange_end(exch); 126 132 127 133 return rc; 128 134 } 129 135 130 int iplink_addr_remove(iplink_t *iplink, i plink_addr_t *addr)136 int iplink_addr_remove(iplink_t *iplink, inet_addr_t *addr) 131 137 { 138 uint32_t addr_addr; 139 int rc = inet_addr_pack(addr, &addr_addr); 140 if (rc != EOK) 141 return rc; 142 132 143 async_exch_t *exch = async_exchange_begin(iplink->sess); 133 134 int rc = async_req_1_0(exch, IPLINK_ADDR_REMOVE, (sysarg_t)addr->ipv4); 144 rc = async_req_1_0(exch, IPLINK_ADDR_REMOVE, (sysarg_t) addr_addr); 135 145 async_exchange_end(exch); 136 146 137 147 return rc; 138 148 } … … 141 151 ipc_call_t *call) 142 152 { 143 int rc;144 153 iplink_sdu_t sdu; 145 146 sdu.lsrc .ipv4= IPC_GET_ARG1(*call);147 sdu.ldest .ipv4= IPC_GET_ARG2(*call);148 149 rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size);154 155 sdu.lsrc = IPC_GET_ARG1(*call); 156 sdu.ldest = IPC_GET_ARG2(*call); 157 158 int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size); 150 159 if (rc != EOK) { 151 160 async_answer_0(callid, rc); 152 161 return; 153 162 } 154 163 155 164 rc = iplink->ev_ops->recv(iplink, &sdu); 156 165 free(sdu.data); -
uspace/lib/c/generic/iplink_srv.c
r3abf0760 r89ac5513 54 54 ipc_call_t *call) 55 55 { 56 int rc; 57 iplink_srv_addr_t addr; 58 59 addr.ipv4 = IPC_GET_ARG1(*call); 60 61 rc = srv->ops->addr_add(srv, &addr); 56 int rc = srv->ops->addr_add(srv, IPC_GET_ARG1(*call)); 62 57 async_answer_0(callid, rc); 63 58 } … … 66 61 ipc_call_t *call) 67 62 { 68 int rc; 69 iplink_srv_addr_t addr; 70 71 addr.ipv4 = IPC_GET_ARG1(*call); 72 73 rc = srv->ops->addr_remove(srv, &addr); 63 int rc = srv->ops->addr_remove(srv, IPC_GET_ARG1(*call)); 74 64 async_answer_0(callid, rc); 75 65 } … … 81 71 int rc; 82 72 83 sdu.lsrc .ipv4= IPC_GET_ARG1(*call);84 sdu.ldest .ipv4= IPC_GET_ARG2(*call);73 sdu.lsrc = IPC_GET_ARG1(*call); 74 sdu.ldest = IPC_GET_ARG2(*call); 85 75 86 76 rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size); … … 139 129 if (!method) { 140 130 /* The other side has hung up */ 141 fibril_mutex_lock(&srv->lock);131 fibril_mutex_lock(&srv->lock); 142 132 srv->connected = false; 143 fibril_mutex_unlock(&srv->lock);133 fibril_mutex_unlock(&srv->lock); 144 134 async_answer_0(callid, EOK); 145 135 break; … … 175 165 176 166 ipc_call_t answer; 177 aid_t req = async_send_2(exch, IPLINK_EV_RECV, sdu->lsrc.ipv4,178 sdu->ldest.ipv4, &answer);167 aid_t req = async_send_2(exch, IPLINK_EV_RECV, (sysarg_t) sdu->lsrc, 168 (sysarg_t) sdu->ldest, &answer); 179 169 int rc = async_data_write_start(exch, sdu->data, sdu->size); 180 170 async_exchange_end(exch); -
uspace/lib/c/generic/mem.c
r3abf0760 r89ac5513 224 224 * @param s1 Pointer to the first area to compare. 225 225 * @param s2 Pointer to the second area to compare. 226 * @param len Size of the first area in bytes. Both areas must have227 * the same length.228 * 229 * @return If len is 0, return zero. If the areas match, return230 * zero. Otherwise return non-zero.231 * 232 */ 233 int bcmp(const void *s1, const void *s2, size_t len)226 * @param len Size of the areas in bytes. 227 * 228 * @return Zero if areas have the same contents. If they differ, 229 * the sign of the result is the same as the sign of the 230 * difference of the first pair of different bytes. 231 * 232 */ 233 int memcmp(const void *s1, const void *s2, size_t len) 234 234 { 235 235 uint8_t *u1 = (uint8_t *) s1; 236 236 uint8_t *u2 = (uint8_t *) s2; 237 238 for (; (len != 0) && (*u1++ == *u2++); len--); 239 240 return len; 237 size_t i; 238 239 for (i = 0; i < len; i++) { 240 if (*u1 != *u2) 241 return (int)(*u1) - (int)(*u2); 242 ++u1; 243 ++u2; 244 } 245 246 return 0; 241 247 } 242 248 -
uspace/lib/c/generic/net/inet.c
r3abf0760 r89ac5513 39 39 #include <net/in6.h> 40 40 #include <net/inet.h> 41 41 #include <inet/addr.h> 42 42 #include <errno.h> 43 43 #include <mem.h> … … 94 94 } 95 95 96 static int inet_pton4(const char *address, uint8_t *data) 97 { 98 memset(data, 0, 4); 99 100 const char *cur = address; 101 size_t i = 0; 102 103 while (i < 4) { 104 int rc = str_uint8_t(cur, &cur, 10, false, &data[i]); 105 if (rc != EOK) 106 return rc; 107 108 i++; 109 110 if (*cur == 0) 111 break; 112 113 if (*cur != '.') 114 return EINVAL; 115 116 if (i < 4) 117 cur++; 118 } 119 120 if ((i == 4) && (*cur != 0)) 121 return EINVAL; 122 123 return EOK; 124 } 125 126 static int inet_pton6(const char *address, uint8_t *data) 127 { 128 // FIXME TODO 129 return ENOTSUP; 130 } 131 96 132 /** Parses the character string into the address. 97 133 * 98 * If the string is shorter than the full address, zero bytes are added. 134 * @param[in] family The address family. 135 * @param[in] address The character buffer to be parsed. 136 * @param[out] data The address data to be filled. 99 137 * 100 * @param[in] family The address family. 101 * @param[in] address The character buffer to be parsed. 102 * @param[out] data The address data to be filled. 103 * @return EOK on success. 104 * @return EINVAL if the data parameter is NULL. 105 * @return ENOENT if the address parameter is NULL. 106 * @return ENOTSUP if the address family is not supported. 138 * @return EOK on success. 139 * @return EINVAL if the data parameter is NULL. 140 * @return ENOENT if the address parameter is NULL. 141 * @return ENOTSUP if the address family is not supported. 142 * 107 143 */ 108 144 int inet_pton(uint16_t family, const char *address, uint8_t *data) 109 145 { 110 /** The base number of the values. */111 int base;112 /** The number of bytes per a section. */113 size_t bytes;114 /** The number of bytes of the address data. */115 int count;116 117 const char *next;118 char *last;119 int index;120 size_t shift;121 unsigned long value;122 123 if (!data)124 return EINVAL;125 126 /* Set processing parameters */127 146 switch (family) { 128 147 case AF_INET: 129 count = 4; 130 base = 10; 131 bytes = 1; 132 break; 133 148 return inet_pton4(address, data); 134 149 case AF_INET6: 135 count = 16; 136 base = 16; 137 bytes = 4; 138 break; 139 150 return inet_pton6(address, data); 140 151 default: 152 /** Unknown address family */ 141 153 return ENOTSUP; 142 154 } 143 144 /* Erase if no address */145 if (!address) {146 bzero(data, count);147 return ENOENT;148 }149 150 /* Process string from the beginning */151 next = address;152 index = 0;153 do {154 /* If the actual character is set */155 if (next && *next) {156 157 /* If not on the first character */158 if (index) {159 /* Move to the next character */160 ++next;161 }162 163 /* Parse the actual integral value */164 value = strtoul(next, &last, base);165 /*166 * Remember the last problematic character167 * should be either '.' or ':' but is ignored to be168 * more generic169 */170 next = last;171 172 /* Fill the address data byte by byte */173 shift = bytes - 1;174 do {175 /* like little endian */176 data[index + shift] = value;177 value >>= 8;178 } while(shift --);179 180 index += bytes;181 } else {182 /* Erase the rest of the address */183 bzero(data + index, count - index);184 return EOK;185 }186 } while (index < count);187 188 return EOK;189 155 } 190 156 -
uspace/lib/c/generic/net/socket_client.c
r3abf0760 r89ac5513 87 87 /** Parent module service. */ 88 88 services_t service; 89 /** Socket family */ 90 int family; 89 91 90 92 /** … … 395 397 switch (domain) { 396 398 case PF_INET: 399 case PF_INET6: 397 400 switch (type) { 398 401 case SOCK_STREAM: … … 433 436 break; 434 437 435 case PF_INET6:436 438 default: 437 439 return EPFNOSUPPORT; … … 446 448 return ENOMEM; 447 449 448 bzero(socket, sizeof(*socket)); 450 memset(socket, 0, sizeof(*socket)); 451 socket->family = domain; 449 452 fibril_rwlock_write_lock(&socket_globals.lock); 450 453 … … 657 660 return ENOMEM; 658 661 } 659 bzero(new_socket, sizeof(*new_socket));662 memset(new_socket, 0, sizeof(*new_socket)); 660 663 socket_id = socket_generate_new_id(); 661 664 if (socket_id <= 0) { -
uspace/lib/c/generic/net/socket_parse.c
r3abf0760 r89ac5513 79 79 int socket_parse_protocol_family(const char *name, int *pf) 80 80 { 81 if (str_lcmp(name, "PF_INET6", 8) == 0) { 82 *pf = PF_INET6; 83 return EOK; 84 } 85 81 86 if (str_lcmp(name, "PF_INET", 7) == 0) { 82 87 *pf = PF_INET; 83 return EOK;84 }85 86 if (str_lcmp(name, "PF_INET6", 8) == 0) {87 *pf = PF_INET6;88 88 return EOK; 89 89 } -
uspace/lib/c/generic/str.c
r3abf0760 r89ac5513 1524 1524 * 1525 1525 */ 1526 int str_uint8_t(const char *nptr, c har **endptr, unsigned int base,1526 int str_uint8_t(const char *nptr, const char **endptr, unsigned int base, 1527 1527 bool strict, uint8_t *result) 1528 1528 { … … 1571 1571 * 1572 1572 */ 1573 int str_uint16_t(const char *nptr, c har **endptr, unsigned int base,1573 int str_uint16_t(const char *nptr, const char **endptr, unsigned int base, 1574 1574 bool strict, uint16_t *result) 1575 1575 { … … 1618 1618 * 1619 1619 */ 1620 int str_uint32_t(const char *nptr, c har **endptr, unsigned int base,1620 int str_uint32_t(const char *nptr, const char **endptr, unsigned int base, 1621 1621 bool strict, uint32_t *result) 1622 1622 { … … 1665 1665 * 1666 1666 */ 1667 int str_uint64_t(const char *nptr, c har **endptr, unsigned int base,1667 int str_uint64_t(const char *nptr, const char **endptr, unsigned int base, 1668 1668 bool strict, uint64_t *result) 1669 1669 { … … 1704 1704 * 1705 1705 */ 1706 int str_size_t(const char *nptr, c har **endptr, unsigned int base,1706 int str_size_t(const char *nptr, const char **endptr, unsigned int base, 1707 1707 bool strict, size_t *result) 1708 1708 {
Note:
See TracChangeset
for help on using the changeset viewer.
