| 46 | } |
| 47 | |
| 48 | uint64_t cbm_platform_scale_counter_ns(uint64_t counter, uint64_t frequency) { |
| 49 | if (frequency == 0) { |
| 50 | return UINT64_MAX; |
| 51 | } |
| 52 | uint64_t whole_seconds = counter / frequency; |
| 53 | uint64_t remainder = counter % frequency; |
| 54 | if (whole_seconds > UINT64_MAX / CBM_NSEC_PER_SEC) { |
| 55 | return UINT64_MAX; |
| 56 | } |
| 57 | uint64_t whole_ns = whole_seconds * CBM_NSEC_PER_SEC; |
| 58 | uint64_t fraction_ns = cbm_platform_scale_fraction(remainder, CBM_NSEC_PER_SEC, frequency); |
| 59 | return fraction_ns > UINT64_MAX - whole_ns ? UINT64_MAX : whole_ns + fraction_ns; |
| 60 | } |
| 61 | |
| 62 | /* Canonicalize a Windows drive letter to upper-case in place: "c:/x" -> "C:/x". |
| 63 | * Windows drive letters are case-insensitive, but a lowercase one (as agent |
no test coverage detected