From cf73bf630943e08c34a5579dc51feb22ba164cef Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Sat, 7 Jan 2012 00:43:21 +0100 Subject: [PATCH] [lib] Avoid struct arguments & return values Modify the *time*() functions to avoid passing structures in arguments (using const pointers instead) or returning structures (using result arguments instead). --- libowlps-resultreader/libowlps-resultreader.c | 4 +- libowlps/libowlps.c | 80 ++++++++++--------- libowlps/owlps.h | 25 +++--- owlps-aggregator/owlps-aggregatord.c | 43 +++++----- owlps-client/owlps-client.c | 4 +- owlps-listener/owlps-listenerd.c | 19 +++-- owlps-positioning/src/inputudpsocket.cc | 2 +- 7 files changed, 96 insertions(+), 81 deletions(-) diff --git a/libowlps-resultreader/libowlps-resultreader.c b/libowlps-resultreader/libowlps-resultreader.c index d3602ab..3f1d05d 100644 --- a/libowlps-resultreader/libowlps-resultreader.c +++ b/libowlps-resultreader/libowlps-resultreader.c @@ -234,7 +234,7 @@ void owl_result_to_csv(char dst[OWL_CSV_RESULT_STRLEN], assert(src) ; - owl_timestamp_to_string(timestamp_str, src->mobile_timestamp) ; + owl_timestamp_to_string(&src->mobile_timestamp, timestamp_str) ; snprintf(dst, OWL_CSV_RESULT_REQUEST_STRLEN, "%s;%"PRIu8";%s;%u", src->mobile_mac_addr, @@ -353,7 +353,7 @@ void owl_fprint_result(FILE *stream, const owl_result *const src) assert(src) ; - owl_timestamp_to_string(timestamp_str, src->mobile_timestamp) ; + owl_timestamp_to_string(&src->mobile_timestamp, timestamp_str) ; fprintf(stream, "Mobile MAC: %s\n" "Request type: %"PRIu8"\n" diff --git a/libowlps/libowlps.c b/libowlps/libowlps.c index 79a1835..73cf9c1 100644 --- a/libowlps/libowlps.c +++ b/libowlps/libowlps.c @@ -180,55 +180,62 @@ int owl_timestamp_now(owl_timestamp *const now) return ret ; } - *now = owl_timespec_to_timestamp(now_ts) ; + owl_timespec_to_timestamp(&now_ts, now) ; return 0 ; } /* - * Returns a owl_timestamp from a struct timespec. + * Converts the struct timespec 'src' into the owl_timestamp 'dst'. */ -owl_timestamp owl_timespec_to_timestamp(const struct timespec d) +void owl_timespec_to_timestamp(const struct timespec *const src, + owl_timestamp *const dst) { - owl_timestamp res ; - res.tv_sec = d.tv_sec ; - res.tv_nsec = d.tv_nsec ; - return res ; + assert(src) ; + assert(dst) ; + dst->tv_sec = src->tv_sec ; + dst->tv_nsec = src->tv_nsec ; } /* - * Returns a owl_timestamp from a struct timeval. + * Converts the struct timeval 'src' into the owl_timestamp 'dst'. */ -owl_timestamp owl_timeval_to_timestamp(const struct timeval d) +void owl_timeval_to_timestamp(const struct timeval *const src, + owl_timestamp *const dst) { - owl_timestamp res ; - res.tv_sec = d.tv_sec ; - res.tv_nsec = d.tv_usec * 1000u ; - return res ; + assert(src) ; + assert(dst) ; + dst->tv_sec = src->tv_sec ; + dst->tv_nsec = src->tv_usec * 1000u ; } -owl_bool owl_timestamp_equals(const owl_timestamp d1, - const owl_timestamp d2) +owl_bool owl_timestamp_equals(const owl_timestamp *const d1, + const owl_timestamp *const d2) { - return d1.tv_sec == d2.tv_sec && d1.tv_nsec == d2.tv_nsec ; + assert(d1) ; + assert(d2) ; + return d1->tv_sec == d2->tv_sec && d1->tv_nsec == d2->tv_nsec ; } -owl_bool owl_timestamp_is_null(const owl_timestamp d) +owl_bool owl_timestamp_is_null(const owl_timestamp *const d) { - return d.tv_sec == 0 && d.tv_nsec == 0 ; + assert(d) ; + return d->tv_sec == 0 && d->tv_nsec == 0 ; } /* * Converts a owl_timestamp date value into milliseconds. */ -uint64_t owl_timestamp_to_ms(const owl_timestamp d) +uint64_t owl_timestamp_to_ms(const owl_timestamp *const d) { - return (uint64_t) d.tv_sec * 1000u + (uint64_t) d.tv_nsec / 1000000lu ; + assert(d) ; + return + (uint64_t) d->tv_sec * 1000u + (uint64_t) d->tv_nsec / 1000000lu ; } @@ -237,22 +244,25 @@ uint64_t owl_timestamp_to_ms(const owl_timestamp d) * 'dst' must be an allocated array of at least OWL_TIMESTAMP_STRLEN * characters. */ -void owl_timestamp_to_string(char *const dst, const owl_timestamp src) +void owl_timestamp_to_string(const owl_timestamp *const src, + char *const dst) { + assert(src) ; + assert(dst) ; snprintf(dst, OWL_TIMESTAMP_STRLEN, "%"PRIu32".%"PRIu32, - src.tv_sec, src.tv_nsec) ; + src->tv_sec, src->tv_nsec) ; } /* * Returns the time (in milliseconds) between two dates. */ -uint_fast32_t owl_time_elapsed_ms(const owl_timestamp d1, - const owl_timestamp d2) +uint_fast32_t owl_time_elapsed_ms(const owl_timestamp *const d1, + const owl_timestamp *const d2) { owl_timestamp elapsed ; - owl_time_elapsed(&d1, &d2, &elapsed) ; - return owl_timestamp_to_ms(elapsed) ; + owl_time_elapsed(d1, d2, &elapsed) ; + return owl_timestamp_to_ms(&elapsed) ; } @@ -317,24 +327,22 @@ void owl_time_elapsed(const owl_timestamp *const d1, /* * Converts a owl_timestamp from host endianess to network endianess. */ -owl_timestamp owl_hton_timestamp(const owl_timestamp d) +void owl_hton_timestamp(owl_timestamp *const d) { - owl_timestamp date ; - date.tv_sec = htonl(d.tv_sec) ; - date.tv_nsec = htonl(d.tv_nsec) ; - return date ; + assert(d) ; + d->tv_sec = htonl(d->tv_sec) ; + d->tv_nsec = htonl(d->tv_nsec) ; } /* * Converts a owl_timestamp from network endianess to host endianess. */ -owl_timestamp owl_ntoh_timestamp(const owl_timestamp d) +void owl_ntoh_timestamp(owl_timestamp *const d) { - owl_timestamp date ; - date.tv_sec = ntohl(d.tv_sec) ; - date.tv_nsec = ntohl(d.tv_nsec) ; - return date ; + assert(d) ; + d->tv_sec = ntohl(d->tv_sec) ; + d->tv_nsec = ntohl(d->tv_nsec) ; } diff --git a/libowlps/owlps.h b/libowlps/owlps.h index 71b7fe4..b550340 100644 --- a/libowlps/owlps.h +++ b/libowlps/owlps.h @@ -212,22 +212,25 @@ uint_fast8_t owl_frequency_to_channel(const uint_fast16_t channel) ; // Time int owl_msleep(uint32_t time_ms) ; int owl_timestamp_now(owl_timestamp *const now) ; -owl_timestamp owl_timespec_to_timestamp(const struct timespec d) ; -owl_timestamp owl_timeval_to_timestamp(const struct timeval d) ; -owl_bool owl_timestamp_equals(const owl_timestamp d1, - const owl_timestamp d2) ; -owl_bool owl_timestamp_is_null(const owl_timestamp d) ; -uint64_t owl_timestamp_to_ms(const owl_timestamp d) ; -void owl_timestamp_to_string(char *const dst, const owl_timestamp src) ; -uint_fast32_t owl_time_elapsed_ms(const owl_timestamp d1, - const owl_timestamp d2) ; +void owl_timespec_to_timestamp(const struct timespec *const src, + owl_timestamp *const dst) ; +void owl_timeval_to_timestamp(const struct timeval *const src, + owl_timestamp *const dst) ; +owl_bool owl_timestamp_equals(const owl_timestamp *const d1, + const owl_timestamp *const d2) ; +owl_bool owl_timestamp_is_null(const owl_timestamp *const d) ; +uint64_t owl_timestamp_to_ms(const owl_timestamp *const d) ; +void owl_timestamp_to_string(const owl_timestamp *const src, + char *const dst) ; +uint_fast32_t owl_time_elapsed_ms(const owl_timestamp *const d1, + const owl_timestamp *const d2) ; void owl_time_elapsed(const owl_timestamp *const d1, const owl_timestamp *const d2, owl_timestamp *const elapsed) ; // Endianess -owl_timestamp owl_hton_timestamp(const owl_timestamp d) ; -owl_timestamp owl_ntoh_timestamp(const owl_timestamp d) ; +void owl_hton_timestamp(owl_timestamp *const d) ; +void owl_ntoh_timestamp(owl_timestamp *const d) ; float owl_swap_float(const float f) ; #if __BYTE_ORDER == __BIG_ENDIAN # define owl_htonf(f) (f) diff --git a/owlps-aggregator/owlps-aggregatord.c b/owlps-aggregator/owlps-aggregatord.c index 7f53229..6d3c0f8 100644 --- a/owlps-aggregator/owlps-aggregatord.c +++ b/owlps-aggregator/owlps-aggregatord.c @@ -468,8 +468,8 @@ int read_loop(int sockfd) } // Endianess conversions: - request.request_time = owl_ntoh_timestamp(request.request_time) ; - request.capture_time = owl_ntoh_timestamp(request.capture_time) ; + owl_ntoh_timestamp(&request.request_time) ; + owl_ntoh_timestamp(&request.capture_time) ; request.x_position = owl_ntohf(request.x_position) ; request.y_position = owl_ntohf(request.y_position) ; request.z_position = owl_ntohf(request.z_position) ; @@ -483,9 +483,10 @@ int read_loop(int sockfd) mobile_mac_addr_str[OWL_ETHER_ADDR_STRLEN], mobile_ip_str[INET_ADDRSTRLEN] ; - owl_timestamp_to_string(request_time_str, - request.request_time) ; - owl_timestamp_to_string(capture_time_str, request.capture_time) ; + owl_timestamp_to_string(&request.request_time, + request_time_str) ; + owl_timestamp_to_string(&request.capture_time, + capture_time_str) ; owl_mac_bytes_to_string_r(request.ap_mac_addr_bytes, ap_mac_addr_str) ; owl_mac_bytes_to_string_r(request.mobile_mac_addr_bytes, @@ -594,8 +595,8 @@ void* monitor_requests(void *NULL_value) while (request_ptr != NULL) // Parsing list { - sub = owl_time_elapsed_ms(request_ptr->start_time, - current_time) ; + sub = owl_time_elapsed_ms(&request_ptr->start_time, + ¤t_time) ; // If the request was not treated already if (request_ptr->info != NULL) @@ -618,8 +619,8 @@ void* monitor_requests(void *NULL_value) fprintf(fd, "%"PRIu8";", request_ptr->type) ; // Print request mobile timestamp to the output file - owl_timestamp_to_string(request_time_str, - request_ptr->request_time) ; + owl_timestamp_to_string(&request_ptr->request_time, + request_time_str) ; fprintf(fd, "%s;", request_time_str) ; // Print request info to the output file @@ -634,8 +635,8 @@ void* monitor_requests(void *NULL_value) memcpy(request.mobile_mac_addr_bytes, request_ptr->mobile_mac_addr_bytes, ETHER_ADDR_LEN) ; - request.request_time = - owl_hton_timestamp(request_ptr->request_time) ; + request.request_time = request_ptr->request_time ; + owl_hton_timestamp(&request.request_time) ; request.x_position = owl_htonf(request_ptr->x_position) ; request.y_position = @@ -790,8 +791,8 @@ void got_request(owl_captured_request request) { // Research criterion: MAC and transmission time if (owl_mac_equals(request.mobile_mac_addr_bytes, tmp_request->mobile_mac_addr_bytes) - && owl_timestamp_equals(request.request_time, - tmp_request->request_time)) + && owl_timestamp_equals(&request.request_time, + &tmp_request->request_time)) break ; // If the request exists, we stop on it tmp_request = tmp_request->next ; } @@ -804,9 +805,9 @@ void got_request(owl_captured_request request) // times on the APs less than 10 ms // TODO : define an option for the maximal difference time. if (owl_mac_equals(request.mobile_mac_addr_bytes, - tmp_request->mobile_mac_addr_bytes) - && owl_time_elapsed_ms(request.capture_time, - tmp_request->request_time) <= 10) + tmp_request->mobile_mac_addr_bytes) && + owl_time_elapsed_ms(&request.capture_time, + &tmp_request->request_time) <= 10) break ; // If the request exists, we stop on it tmp_request = tmp_request->next ; } @@ -1102,7 +1103,7 @@ void delete_old_aps() owl_timestamp_now(&now) ; while (token_aps != NULL) - if (owl_time_elapsed_ms(token_aps->last_seen, now) > + if (owl_time_elapsed_ms(&token_aps->last_seen, &now) > (uint_fast32_t) cfg_getint(cfg, "ap_keep_timeout") * 1000) delete_ap(token_aps) ; else @@ -1248,10 +1249,10 @@ void print_request_list() owl_mac_bytes_to_string_r(request_ptr->mobile_mac_addr_bytes, mobile_mac_str) ; - owl_timestamp_to_string(request_time_str, - request_ptr->request_time) ; - owl_timestamp_to_string(start_time_str, - request_ptr->start_time) ; + owl_timestamp_to_string(&request_ptr->request_time, + request_time_str) ; + owl_timestamp_to_string(&request_ptr->start_time, + start_time_str) ; fprintf(stderr, "Type: %"PRIu8"\n" "Mobile MAC: %s\n" diff --git a/owlps-client/owlps-client.c b/owlps-client/owlps-client.c index 21297c7..0bfb08c 100644 --- a/owlps-client/owlps-client.c +++ b/owlps-client/owlps-client.c @@ -400,8 +400,8 @@ void make_packet() // Get the current time and copy it as a string before to switch it to // network endianess: owl_timestamp_now(&request_time) ; - owl_timestamp_to_string(request_time_str, request_time) ; - request_time = owl_hton_timestamp(request_time) ; + owl_timestamp_to_string(&request_time, request_time_str) ; + owl_hton_timestamp(&request_time) ; if (is_calibration_request) // Calibration packet { diff --git a/owlps-listener/owlps-listenerd.c b/owlps-listener/owlps-listenerd.c index bbdeb42..6edfcc1 100644 --- a/owlps-listener/owlps-listenerd.c +++ b/owlps-listener/owlps-listenerd.c @@ -926,8 +926,8 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, // Copy AP MAC : memcpy(request.ap_mac_addr_bytes, my_mac_bytes, ETHER_ADDR_LEN) ; // Capture time is in the pcap header (host-endian): - request.capture_time = - owl_hton_timestamp(owl_timeval_to_timestamp(header->ts)) ; + owl_timeval_to_timestamp(&header->ts, &request.capture_time) ; + owl_hton_timestamp(&request.capture_time) ; /* Active mode */ if (is_explicit_packet @@ -1018,6 +1018,7 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, /* Display the packet details */ if (VERBOSE_DISPLAY_CAPTURED) { + owl_timestamp tmp_time ; char request_time_str[OWL_TIMESTAMP_STRLEN], capture_time_str[OWL_TIMESTAMP_STRLEN], @@ -1025,10 +1026,12 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, mobile_mac_addr_str[OWL_ETHER_ADDR_STRLEN], mobile_ip_str[INET_ADDRSTRLEN] ; - owl_timestamp_to_string(request_time_str, - owl_ntoh_timestamp(request.request_time)) ; - owl_timestamp_to_string(capture_time_str, - owl_ntoh_timestamp(request.capture_time)) ; + tmp_time = request.request_time ; + owl_ntoh_timestamp(&tmp_time) ; + owl_timestamp_to_string(&tmp_time, request_time_str) ; + tmp_time = request.capture_time ; + owl_ntoh_timestamp(&tmp_time) ; + owl_timestamp_to_string(&tmp_time, capture_time_str) ; owl_mac_bytes_to_string_r(request.ap_mac_addr_bytes, ap_mac_addr_str) ; owl_mac_bytes_to_string_r(request.mobile_mac_addr_bytes, @@ -1388,11 +1391,11 @@ uint_fast16_t make_packet(uint8_t **packet) if (VERBOSE_CHATTERBOX) { char request_time_str[OWL_TIMESTAMP_STRLEN] ; - owl_timestamp_to_string(request_time_str, request_time) ; + owl_timestamp_to_string(&request_time, request_time_str) ; printf("Autocalibration time: %s\n", request_time_str) ; } - request_time = owl_hton_timestamp(request_time) ; + owl_hton_timestamp(&request_time) ; offset = 0 ; size = diff --git a/owlps-positioning/src/inputudpsocket.cc b/owlps-positioning/src/inputudpsocket.cc index 51297bf..6944c7e 100644 --- a/owlps-positioning/src/inputudpsocket.cc +++ b/owlps-positioning/src/inputudpsocket.cc @@ -97,7 +97,7 @@ bool InputUDPSocket::fill_current_request() } // Endianess conversions - request.request_time = owl_ntoh_timestamp(request.request_time) ; + owl_ntoh_timestamp(&request.request_time) ; request.nb_info = ntohs(request.nb_info) ; request.x_position = owl_ntohf(request.x_position) ; request.y_position = owl_ntohf(request.y_position) ;