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