<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dpibreak.git/src, branch v0.4.3</title>
<subtitle>System-wide DPI circumvention with minimal configuration
</subtitle>
<id>http://git.dilluti0n.com/dpibreak.git/atom?h=v0.4.3</id>
<link rel='self' href='http://git.dilluti0n.com/dpibreak.git/atom?h=v0.4.3'/>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/'/>
<updated>2026-02-16T04:29:07Z</updated>
<entry>
<title>windows: fix regression intorduced in b68753e8</title>
<updated>2026-02-16T04:29:07Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-16T04:29:07Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=bfad92944c56642d4cbfd5bb2ec512ba60c0cacf'/>
<id>urn:sha1:bfad92944c56642d4cbfd5bb2ec512ba60c0cacf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Log version information on startup</title>
<updated>2026-02-16T04:06:43Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-16T04:06:43Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=978c3658ede83ef9b5c0c38ee554f88c8de0bc48'/>
<id>urn:sha1:978c3658ede83ef9b5c0c38ee554f88c8de0bc48</id>
<content type='text'>
</content>
</entry>
<entry>
<title>log: add defensive error handling for local_time</title>
<updated>2026-02-15T19:47:51Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-15T19:47:51Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=f692ebd774e79494c12e64c05a093c415b3d05c0'/>
<id>urn:sha1:f692ebd774e79494c12e64c05a093c415b3d05c0</id>
<content type='text'>
Fallback to zeroed timestamp when time()/localtime_r() fails.
</content>
</entry>
<entry>
<title>log: drop chrono, use localtime_r and GetLocalTime directly</title>
<updated>2026-02-15T19:24:20Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-15T19:24:20Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=e157dc47d084eae5f5d52720afefe8a2f32a55aa'/>
<id>urn:sha1:e157dc47d084eae5f5d52720afefe8a2f32a55aa</id>
<content type='text'>
24 KiB is precious :)
</content>
</entry>
<entry>
<title>log: print time with crate chrono</title>
<updated>2026-02-15T19:06:58Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-15T19:06:58Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=4b0c306906f4f06d6a5d98ab5866731f1c5437e2'/>
<id>urn:sha1:4b0c306906f4f06d6a5d98ab5866731f1c5437e2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>windows: fix nit build failure</title>
<updated>2026-02-15T18:18:26Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-15T18:18:07Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=17702221d834de2b13789244edfcb4f9ee18f135'/>
<id>urn:sha1:17702221d834de2b13789244edfcb4f9ee18f135</id>
<content type='text'>
</content>
</entry>
<entry>
<title>linux: add TODO on daemonize</title>
<updated>2026-02-15T17:55:54Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-15T17:55:54Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=5236617a0db0578794bb51f01b0a55028d9d1b3e'/>
<id>urn:sha1:5236617a0db0578794bb51f01b0a55028d9d1b3e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>opt: decouple set_opt() from logging</title>
<updated>2026-02-15T17:52:03Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-15T17:49:49Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=b68753e878c440f1a11aa89f1f359764f1609734'/>
<id>urn:sha1:b68753e878c440f1a11aa89f1f359764f1609734</id>
<content type='text'>
set_opt() was logging each option as it set them, which created a
tight coupling between option initialization and log output timing.
This was particularly problematic for daemon mode: daemonize must
happen after set_opt() (to know whether -D was passed) but before
logging (so output goes to the log file, not stdout).

Split into set_opt() -&gt; InitializedOpts and InitializedOpts::log(),
using a typestate pattern to enforce at compile time that log() cannot
be called before set_opt(). This lets each platform's bootstrap()
handle daemonization between the two steps:

    let initialized = opt.set_opt()?;
    platform::bootstrap()?;   // daemonize here if needed
    initialized.log();        // now safe to log

Also:
- Move daemonize_1() into platform::bootstrap() on both platforms
- Make daemonize_1() / service_main() private to their platform modules
- Fix the long-standing TODO about using log_println in daemonize()
</content>
</entry>
<entry>
<title>linux: fix log file truncated when daemonize fails</title>
<updated>2026-02-15T17:23:41Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-15T17:21:36Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=90972573f4ecf838469e396fb4f81fa02cade5de'/>
<id>urn:sha1:90972573f4ecf838469e396fb4f81fa02cade5de</id>
<content type='text'>
1. open without O_APPEND (offset = 0) and O_TRUNC (original bug)
2. dup file descripter with .try_clone() and feed it to daemonize
3. truncate file with .set_len(0) on child after daemonize.start()
   succed

Fixes: https://github.com/dilluti0n/dpibreak/issues/17
</content>
</entry>
<entry>
<title>linux: exit if not root</title>
<updated>2026-02-15T16:30:46Z</updated>
<author>
<name>dilluti0n</name>
<email>hskimse1@gmail.com</email>
</author>
<published>2026-02-15T16:30:46Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/dpibreak.git/commit/?id=38382fa2bd354617d930b339a370cbe23b6e7945'/>
<id>urn:sha1:38382fa2bd354617d930b339a370cbe23b6e7945</id>
<content type='text'>
</content>
</entry>
</feed>
