<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://dsss.be/w/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://dsss.be/w/feed.php">
        <title>Tyler&#039;s wiki - c</title>
        <description></description>
        <link>https://dsss.be/w/</link>
        <image rdf:resource="https://dsss.be/w/_media/wiki:dokuwiki.svg" />
       <dc:date>2026-05-08T03:31:01+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://dsss.be/w/c:getopt?rev=1250182152&amp;do=diff"/>
                <rdf:li rdf:resource="https://dsss.be/w/c:getting_mixed_c_and_assembler_output?rev=1299180575&amp;do=diff"/>
                <rdf:li rdf:resource="https://dsss.be/w/c:index?rev=1299180481&amp;do=diff"/>
                <rdf:li rdf:resource="https://dsss.be/w/c:key-value_pairs?rev=1250182079&amp;do=diff"/>
                <rdf:li rdf:resource="https://dsss.be/w/c:memmem?rev=1402345726&amp;do=diff"/>
                <rdf:li rdf:resource="https://dsss.be/w/c:timing?rev=1250182174&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://dsss.be/w/_media/wiki:dokuwiki.svg">
        <title>Tyler's wiki</title>
        <link>https://dsss.be/w/</link>
        <url>https://dsss.be/w/_media/wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="https://dsss.be/w/c:getopt?rev=1250182152&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2009-08-13T16:49:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>getopt</title>
        <link>https://dsss.be/w/c:getopt?rev=1250182152&amp;do=diff</link>
        <description>#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main (int argc, char** argv) {
	int o;
	int opt_a;
	char* opt_c;
	while ((o = getopt (argc, argv, &quot;abc:&quot;)) != -1) {
		switch (o) {
		case &#039;a&#039;: opt_a = 1; break;
		case &#039;c&#039;: opt_c = optarg; break;
		default: usage();
		}
	}
	argc -= optind; argv += optind; // throw away option arguments
}</description>
    </item>
    <item rdf:about="https://dsss.be/w/c:getting_mixed_c_and_assembler_output?rev=1299180575&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2011-03-03T19:29:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>getting_mixed_c_and_assembler_output</title>
        <link>https://dsss.be/w/c:getting_mixed_c_and_assembler_output?rev=1299180575&amp;do=diff</link>
        <description>At compile time (from here)
$ gcc -g -Wa,&quot;-ahl=mixed.lst&quot; source_file.c
After compile time:
$ gcc -c -g -O2 source_file.c -o da.o
$ objdump -S da.o</description>
    </item>
    <item rdf:about="https://dsss.be/w/c:index?rev=1299180481&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2011-03-03T19:28:01+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>index</title>
        <link>https://dsss.be/w/c:index?rev=1299180481&amp;do=diff</link>
        <description>C/C++ code snippets

	*  getopt
	*  key-value pairs
	*  timing
	*  memmem - find substrings of raw memory (as opposed to null terminated strings)
	*  Getting mixed C and assembler output


#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

#ifdef DEBUGMSG
	#define DEBUG printf
#else
	#define DEBUG(...) 
#endif

#define die(...) { fprintf(stderr, __VA_ARGS__); exit(1); }
#define pdie(s) { perror(s); exit(1); }

char parse_size(int64_t* v, char* s) {
	char suffix;
	if (sscanf(s,&quot;%lld%c&quot;,v…</description>
    </item>
    <item rdf:about="https://dsss.be/w/c:key-value_pairs?rev=1250182079&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2009-08-13T16:47:59+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>key-value_pairs</title>
        <link>https://dsss.be/w/c:key-value_pairs?rev=1250182079&amp;do=diff</link>
        <description>// takes a string and a delimiter.  turns the first instance of the delimiter into a null and returns a pointer to the next character
// if no delimiter found, returns null
// basically, a cheap one-token tokenizer (without the mess of strtok)
char* split2(char* str,char c) {
	char* p;
	for (p=str; *p; p++) {
		if ((*p)==c) {
			(*p)=&#039;\0&#039;;
			return p+1;
		}
	}
	return NULL;
}

int main(int argc, char** argv) {
	if (argc==1) usage();
	int i;
	for (i=1; i&lt;argc; i++) {
		char* key;
		char* value;
…</description>
    </item>
    <item rdf:about="https://dsss.be/w/c:memmem?rev=1402345726&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-06-09T20:28:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>memmem</title>
        <link>https://dsss.be/w/c:memmem?rev=1402345726&amp;do=diff</link>
        <description>Here&#039;s an implementation of the GNU function memmem that appears to be much faster (2x) than the standard memmem included on my Debian system for my workload.


#include &lt;string.h&gt;
#include &lt;stdint.h&gt;

// Implements the GNU function memmem much faster (2x) than the standard memmem included on my Debian system
char* memmem(char* haystack, int hlen, char* needle, int nlen) {
	if (nlen &gt; hlen) return 0;
	int i=0,j=0;
	switch(nlen) { // we have a few specialized compares for certain needle sizes
	ca…</description>
    </item>
    <item rdf:about="https://dsss.be/w/c:timing?rev=1250182174&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2009-08-13T16:49:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>timing</title>
        <link>https://dsss.be/w/c:timing?rev=1250182174&amp;do=diff</link>
        <description>char* timestamp() {
	static char buf[64];
	struct tm t;

	time_t now = time(NULL);
	localtime_r(&amp;now,&amp;t);

	sprintf(buf,&quot;%04d%02d%02d-%02d%02d%02d&quot;,t.tm_year+1900,t.tm_mon+1,t.tm_mday,t.tm_hour,t.tm_min,t.tm_sec);
	
	return buf;
}


/**
 * Returns the number of seconds since the epoch as a double-precision
 * float with microsecond resolution.
 *
 * @return Time since first call to this function
 */
double getCurrentTime() {
	double t;
	struct timeval tstr;

	if (gettimeofday(&amp;tstr, NULL) &lt; 0) {…</description>
    </item>
</rdf:RDF>
