11/*
22 * User-defined destination (and option) support for CUPS.
33 *
4- * Copyright © 2020-2024 by OpenPrinting.
4+ * Copyright © 2020-2025 by OpenPrinting.
55 * Copyright © 2007-2019 by Apple Inc.
66 * Copyright © 1997-2007 by Easy Software Products.
77 *
88 * Licensed under Apache License v2.0. See the file "LICENSE" for more
99 * information.
1010 */
1111
12- /*
13- * Include necessary headers...
14- */
15-
1612#include "cups-private.h"
1713#include "debug-internal.h"
1814#include <sys/stat.h>
@@ -119,7 +115,7 @@ typedef struct _cups_dnssd_device_s /* Enumerated device */
119115typedef struct _cups_dnssd_resolve_s /* Data for resolving URI */
120116{
121117 int * cancel ; /* Pointer to "cancel" variable */
122- struct timeval end_time ; /* Ending time */
118+ double end_time ; /* Ending time */
123119} _cups_dnssd_resolve_t ;
124120#endif /* HAVE_DNSSD */
125121
@@ -222,7 +218,7 @@ static const char *cups_dnssd_resolve(cups_dest_t *dest, const char *uri,
222218static int cups_dnssd_resolve_cb (void * context );
223219static void cups_dnssd_unquote (char * dst , const char * src ,
224220 size_t dstsize );
225- static int cups_elapsed (struct timeval * t );
221+ static int cups_elapsed (double * t );
226222#endif /* HAVE_DNSSD */
227223static int cups_enum_dests (http_t * http , unsigned flags , int msec , int * cancel , cups_ptype_t type , cups_ptype_t mask , cups_dest_cb_t cb , void * user_data );
228224static int cups_find_dest (const char * name , const char * instance ,
@@ -3290,21 +3286,12 @@ cups_dnssd_resolve(
32903286 * Resolve the URI...
32913287 */
32923288
3293- resolve .cancel = cancel ;
3294- gettimeofday ( & resolve .end_time , NULL );
3289+ resolve .cancel = cancel ;
3290+ resolve .end_time = _cupsGetClock ( );
32953291 if (msec > 0 )
3296- {
3297- resolve .end_time .tv_sec += msec / 1000 ;
3298- resolve .end_time .tv_usec += (msec % 1000 ) * 1000 ;
3299-
3300- while (resolve .end_time .tv_usec >= 1000000 )
3301- {
3302- resolve .end_time .tv_sec ++ ;
3303- resolve .end_time .tv_usec -= 1000000 ;
3304- }
3305- }
3292+ resolve .end_time += 0.001 * msec ;
33063293 else
3307- resolve .end_time . tv_sec += 75 ;
3294+ resolve .end_time += 75.0 ;
33083295
33093296 if (cb )
33103297 (* cb )(user_data , CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_RESOLVING , dest );
@@ -3338,7 +3325,7 @@ cups_dnssd_resolve_cb(void *context) /* I - Resolve data */
33383325{
33393326 _cups_dnssd_resolve_t * resolve = (_cups_dnssd_resolve_t * )context ;
33403327 /* Resolve data */
3341- struct timeval curtime ; /* Current time */
3328+ double curtime ; /* Current time */
33423329
33433330
33443331 /*
@@ -3355,13 +3342,11 @@ cups_dnssd_resolve_cb(void *context) /* I - Resolve data */
33553342 * Otherwise check the end time...
33563343 */
33573344
3358- gettimeofday ( & curtime , NULL );
3345+ curtime = _cupsGetClock ( );
33593346
3360- DEBUG_printf (("4cups_dnssd_resolve_cb: curtime=%d.%06d , end_time=%d.%06d " , ( int ) curtime . tv_sec , ( int ) curtime . tv_usec , ( int ) resolve -> end_time . tv_sec , ( int ) resolve -> end_time . tv_usec ));
3347+ DEBUG_printf (("4cups_dnssd_resolve_cb: curtime=%.6f , end_time=%.6f " , curtime , resolve -> end_time ));
33613348
3362- return (curtime .tv_sec < resolve -> end_time .tv_sec ||
3363- (curtime .tv_sec == resolve -> end_time .tv_sec &&
3364- curtime .tv_usec < resolve -> end_time .tv_usec ));
3349+ return (curtime < resolve -> end_time );
33653350}
33663351
33673352
@@ -3404,15 +3389,15 @@ cups_dnssd_unquote(char *dst, /* I - Destination buffer */
34043389 */
34053390
34063391static int /* O - Elapsed time in milliseconds */
3407- cups_elapsed (struct timeval * t ) /* IO - Previous time */
3392+ cups_elapsed (double * t ) /* IO - Previous time */
34083393{
3409- int msecs ; /* Milliseconds */
3410- struct timeval nt ; /* New time */
3394+ int msecs ; /* Milliseconds */
3395+ double nt ; /* New time */
34113396
34123397
3413- gettimeofday ( & nt , NULL );
3398+ nt = _cupsGetClock ( );
34143399
3415- msecs = (int )(1000 * (nt . tv_sec - t -> tv_sec ) + ( nt . tv_usec - t -> tv_usec ) / 1000 );
3400+ msecs = (int )(1000.0 * (nt - * t ) );
34163401
34173402 * t = nt ;
34183403
@@ -3446,7 +3431,7 @@ cups_enum_dests(
34463431 int count , /* Number of queries started */
34473432 completed , /* Number of completed queries */
34483433 remaining ; /* Remainder of timeout */
3449- struct timeval curtime ; /* Current time */
3434+ double curtime ; /* Current time */
34503435 _cups_dnssd_data_t data ; /* Data for callback */
34513436 _cups_dnssd_device_t * device ; /* Current device */
34523437# ifdef HAVE_MDNSRESPONDER
@@ -3672,7 +3657,7 @@ cups_enum_dests(
36723657 * Get Bonjour-shared printers...
36733658 */
36743659
3675- gettimeofday ( & curtime , NULL );
3660+ curtime = _cupsGetClock ( );
36763661
36773662# ifdef HAVE_MDNSRESPONDER
36783663 if (DNSServiceCreateConnection (& data .main_ref ) != kDNSServiceErr_NoError )
0 commit comments