ObjFW  Check-in [05da423cc9]

Overview
Comment:OFFileURLHandler: Support setting mtime on Windows
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | set-mtime
Files: files | file ages | folders
SHA3-256: 05da423cc94619010001fcf56649bf517585f289e42326d003f1db9503f2f0b3
User & Date: js on 2020-06-01 17:55:43
Other Links: branch diff | manifest | tags
Context
2020-06-01
18:24
OFFileURLHandler: Weakly link _wutime64 check-in: 1fedd3e87a user: js tags: set-mtime
17:55
OFFileURLHandler: Support setting mtime on Windows check-in: 05da423cc9 user: js tags: set-mtime
17:16
OFFileURLHandler: Add support for setting mtime check-in: 1273a3a39a user: js tags: set-mtime
Changes

Modified src/OFFileURLHandler.m from [1c67864bc7] to [605a683718].

20
21
22
23
24
25
26

27
28
29
30



31
32
33
34
35
36
37
#include <errno.h>

#ifdef HAVE_DIRENT_H
# include <dirent.h>
#endif
#include "unistd_wrapper.h"


#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#include <sys/time.h>




#ifdef HAVE_PWD_H
# include <pwd.h>
#endif
#ifdef HAVE_GRP_H
# include <grp.h>
#endif







>




>
>
>







20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <errno.h>

#ifdef HAVE_DIRENT_H
# include <dirent.h>
#endif
#include "unistd_wrapper.h"

#import "platform.h"
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#include <sys/time.h>
#ifdef OF_WINDOWS
# include <utime.h>
#endif

#ifdef HAVE_PWD_H
# include <pwd.h>
#endif
#ifdef HAVE_GRP_H
# include <grp.h>
#endif
601
602
603
604
605
606
607













608
609
610
611
612
613
614
615
616
617
618
619
620
621
622

623
624
625
626
627
628
629

- (void)of_setModificationDate: (OFDate *)date
		   ofItemAtURL: (OFURL *)URL
		    attributes: (of_file_attributes_t)attributes
{
	of_time_interval_t timeInterval = date.timeIntervalSince1970;
	OFString *path = URL.fileSystemRepresentation;













	struct timeval times[2] = {
		{
			.tv_sec = (time_t)timeInterval,
			.tv_usec =
			    (int)((timeInterval - times[0].tv_sec) * 1000)
		},
		times[0]
	};

	if (utimes([path cStringWithEncoding: [OFLocale encoding]], times) != 0)
		@throw [OFSetItemAttributesFailedException
		    exceptionWithURL: URL
			  attributes: attributes
		     failedAttribute: of_file_attribute_key_modification_date
			       errNo: errno];

}

- (void)of_setPOSIXPermissions: (OFNumber *)permissions
		   ofItemAtURL: (OFURL *)URL
		    attributes: (of_file_attributes_t)attributes
{
#ifdef OF_FILE_MANAGER_SUPPORTS_PERMISSIONS







>
>
>
>
>
>
>
>
>
>
>
>
>















>







605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647

- (void)of_setModificationDate: (OFDate *)date
		   ofItemAtURL: (OFURL *)URL
		    attributes: (of_file_attributes_t)attributes
{
	of_time_interval_t timeInterval = date.timeIntervalSince1970;
	OFString *path = URL.fileSystemRepresentation;
#ifdef OF_WINDOWS
	struct __utimbuf64 times = {
		(__time64_t)timeInterval,
		(__time64_t)timeInterval
	};

	if (_wutime64([path UTF16String], &times) != 0)
		@throw [OFSetItemAttributesFailedException
		    exceptionWithURL: URL
			  attributes: attributes
		     failedAttribute: of_file_attribute_key_modification_date
			       errNo: errno];
#else
	struct timeval times[2] = {
		{
			.tv_sec = (time_t)timeInterval,
			.tv_usec =
			    (int)((timeInterval - times[0].tv_sec) * 1000)
		},
		times[0]
	};

	if (utimes([path cStringWithEncoding: [OFLocale encoding]], times) != 0)
		@throw [OFSetItemAttributesFailedException
		    exceptionWithURL: URL
			  attributes: attributes
		     failedAttribute: of_file_attribute_key_modification_date
			       errNo: errno];
#endif
}

- (void)of_setPOSIXPermissions: (OFNumber *)permissions
		   ofItemAtURL: (OFURL *)URL
		    attributes: (of_file_attributes_t)attributes
{
#ifdef OF_FILE_MANAGER_SUPPORTS_PERMISSIONS