/* vim: set sw=4 ts=4 sts=4 et: */

#include "l4str.h"

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

bool lbs_str_has_prefix (const char* str, const char* prefix) {
    int i;
    for (i = 0; str[i] != '\0' && prefix[i] != '\0'; i++) {
        if (str[i] != prefix[i]) {
            return false;
        }
    }
    if (str[i] == '\0' && prefix[i] == '\0') {
        return true;
    }
    if (str[i] == '\0') {
        return false;
    }
    return true;
}

bool lbs_str_has_suffix (const char* str, const char* suffix) {
    size_t len = strlen (str);
    size_t suflen = strlen (suffix);
    int i, j;
    for (i = len - 1, j = suflen - 1; i >= 0 && j >= 0; i--, j--) {
        if (str[i] != suffix[j]) {
            return false;
        }
    }
    if (i < 0 && j >= 0) {
        return false;
    }
    return true;
}

char* lbs_str_printf (const char* format, ...) {
    va_list ap;
    char* newstr;

    va_start (ap, format);
    newstr = lbs_str_vprintf (format, ap);
    va_end (ap);

    return newstr;
}

char* lbs_str_vprintf (const char* format, va_list ap) {
    va_list ap1, ap2;
    char* newstr;
    int len;

    va_copy (ap1, ap);
    len = vsnprintf (NULL, 0, format, ap1) + 1;
    va_end (ap1);

    newstr = xmalloc (len);

    va_copy (ap2, ap);
    vsnprintf (newstr, len, format, ap2);
    va_end (ap2);

    return newstr;
}
let-browser</a></td><td class='form'><form method='get'>
<input type='hidden' name='id' value='db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'/><select name='h' onchange='this.form.submit();'>
<option value='dependabot/npm_and_yarn/async-2.6.4'>dependabot/npm_and_yarn/async-2.6.4</option>
<option value='dependabot/npm_and_yarn/cached-path-relative-1.1.0'>dependabot/npm_and_yarn/cached-path-relative-1.1.0</option>
<option value='dependabot/npm_and_yarn/copy-props-2.0.5'>dependabot/npm_and_yarn/copy-props-2.0.5</option>
<option value='dependabot/npm_and_yarn/css-what-2.1.3'>dependabot/npm_and_yarn/css-what-2.1.3</option>
<option value='dependabot/npm_and_yarn/decode-uri-component-0.2.2'>dependabot/npm_and_yarn/decode-uri-component-0.2.2</option>
<option value='dependabot/npm_and_yarn/eth-ledger-bridge-keyring-0.2.1'>dependabot/npm_and_yarn/eth-ledger-bridge-keyring-0.2.1</option>
<option value='dependabot/npm_and_yarn/eventsource-1.1.1'>dependabot/npm_and_yarn/eventsource-1.1.1</option>
<option value='dependabot/npm_and_yarn/express-4.18.2'>dependabot/npm_and_yarn/express-4.18.2</option>
<option value='dependabot/npm_and_yarn/fast-json-patch-3.1.1'>dependabot/npm_and_yarn/fast-json-patch-3.1.1</option>
<option value='dependabot/npm_and_yarn/follow-redirects-1.14.7'>dependabot/npm_and_yarn/follow-redirects-1.14.7</option>
<option value='dependabot/npm_and_yarn/follow-redirects-1.14.8'>dependabot/npm_and_yarn/follow-redirects-1.14.8</option>
<option value='dependabot/npm_and_yarn/handlebars-4.7.6'>dependabot/npm_and_yarn/handlebars-4.7.6</option>
<option value='dependabot/npm_and_yarn/handlebars-4.7.7'>dependabot/npm_and_yarn/handlebars-4.7.7</option>
<option value='dependabot/npm_and_yarn/hosted-git-info-2.8.9'>dependabot/npm_and_yarn/hosted-git-info-2.8.9</option>
<option value='dependabot/npm_and_yarn/i-0.3.7'>dependabot/npm_and_yarn/i-0.3.7</option>
<option value='dependabot/npm_and_yarn/jsdom-16.5.0'>dependabot/npm_and_yarn/jsdom-16.5.0</option>
<option value='dependabot/npm_and_yarn/jszip-3.10.1'>dependabot/npm_and_yarn/jszip-3.10.1</option>
<option value='dependabot/npm_and_yarn/karma-6.3.14'>dependabot/npm_and_yarn/karma-6.3.14</option>
<option value='dependabot/npm_and_yarn/karma-6.3.16'>dependabot/npm_and_yarn/karma-6.3.16</option>
<option value='dependabot/npm_and_yarn/lodash-es-4.17.21'>dependabot/npm_and_yarn/lodash-es-4.17.21</option>
<option value='dependabot/npm_and_yarn/luxon-1.28.1'>dependabot/npm_and_yarn/luxon-1.28.1</option>
<option value='dependabot/npm_and_yarn/luxon-2.5.2'>dependabot/npm_and_yarn/luxon-2.5.2</option>
<option value='dependabot/npm_and_yarn/markdown-to-jsx-6.11.4'>dependabot/npm_and_yarn/markdown-to-jsx-6.11.4</option>
<option value='dependabot/npm_and_yarn/merge-deep-3.0.3'>dependabot/npm_and_yarn/merge-deep-3.0.3</option>
<option value='dependabot/npm_and_yarn/moment-2.29.2'>dependabot/npm_and_yarn/moment-2.29.2</option>
<option value='dependabot/npm_and_yarn/moment-2.29.4'>dependabot/npm_and_yarn/moment-2.29.4</option>
<option value='dependabot/npm_and_yarn/nested-object-assign-1.0.4'>dependabot/npm_and_yarn/nested-object-assign-1.0.4</option>
<option value='dependabot/npm_and_yarn/node-sass-4.13.1'>dependabot/npm_and_yarn/node-sass-4.13.1</option>
<option value='dependabot/npm_and_yarn/node-sass-7.0.0'>dependabot/npm_and_yarn/node-sass-7.0.0</option>
<option value='dependabot/npm_and_yarn/path-parse-1.0.7'>dependabot/npm_and_yarn/path-parse-1.0.7</option>
<option value='dependabot/npm_and_yarn/pathval-1.1.1'>dependabot/npm_and_yarn/pathval-1.1.1</option>
<option value='dependabot/npm_and_yarn/qs-6.5.3'>dependabot/npm_and_yarn/qs-6.5.3</option>
<option value='dependabot/npm_and_yarn/snyk-1.1024.0'>dependabot/npm_and_yarn/snyk-1.1024.0</option>
<option value='dependabot/npm_and_yarn/ssri-6.0.2'>dependabot/npm_and_yarn/ssri-6.0.2</option>
<option value='dependabot/npm_and_yarn/terser-4.8.1'>dependabot/npm_and_yarn/terser-4.8.1</option>
<option value='dependabot/npm_and_yarn/thenify-3.3.1'>dependabot/npm_and_yarn/thenify-3.3.1</option>
<option value='dependabot/npm_and_yarn/tree-kill-1.2.2'>dependabot/npm_and_yarn/tree-kill-1.2.2</option>
<option value='dependabot/npm_and_yarn/ua-parser-js-0.7.28'>dependabot/npm_and_yarn/ua-parser-js-0.7.28</option>
<option value='dependabot/npm_and_yarn/url-parse-1.5.1'>dependabot/npm_and_yarn/url-parse-1.5.1</option>
<option value='dependabot/npm_and_yarn/url-parse-1.5.10'>dependabot/npm_and_yarn/url-parse-1.5.10</option>
<option value='dependabot/npm_and_yarn/url-parse-1.5.3'>dependabot/npm_and_yarn/url-parse-1.5.3</option>
<option value='dependabot/npm_and_yarn/url-parse-1.5.7'>dependabot/npm_and_yarn/url-parse-1.5.7</option>
<option value='dependabot/npm_and_yarn/websocket-extensions-0.1.4'>dependabot/npm_and_yarn/websocket-extensions-0.1.4</option>
<option value='dependabot/npm_and_yarn/xmldom-and-testem--removed'>dependabot/npm_and_yarn/xmldom-and-testem--removed</option>
<option value='dependabot/npm_and_yarn/y18n-3.2.2'>dependabot/npm_and_yarn/y18n-3.2.2</option>
<option value='master' selected='selected'>master</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>Tangerine fork of MetaMask browser extension (https://github.com/tangerine-network/tangerine-wallet-browser)</td><td class='sub right'></td></tr></table>
<table class='tabs'><tr><td>
<a href='/~lantw44/cgit/tangerine-wallet-browser/about/'>about</a><a href='/~lantw44/cgit/tangerine-wallet-browser/'>summary</a><a href='/~lantw44/cgit/tangerine-wallet-browser/refs/?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>refs</a><a href='/~lantw44/cgit/tangerine-wallet-browser/log/ui/app/components/send/currency-display/tests/currency-display.test.js'>log</a><a href='/~lantw44/cgit/tangerine-wallet-browser/tree/ui/app/components/send/currency-display/tests/currency-display.test.js?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>tree</a><a href='/~lantw44/cgit/tangerine-wallet-browser/commit/ui/app/components/send/currency-display/tests/currency-display.test.js?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>commit</a><a class='active' href='/~lantw44/cgit/tangerine-wallet-browser/diff/ui/app/components/send/currency-display/tests/currency-display.test.js?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>diff</a><a href='/~lantw44/cgit/tangerine-wallet-browser/stats/ui/app/components/send/currency-display/tests/currency-display.test.js'>stats</a></td><td class='form'><form class='right' method='get' action='/~lantw44/cgit/tangerine-wallet-browser/log/ui/app/components/send/currency-display/tests/currency-display.test.js'>
<input type='hidden' name='id' value='db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/~lantw44/cgit/tangerine-wallet-browser/diff/?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>root</a>/<a href='/~lantw44/cgit/tangerine-wallet-browser/diff/ui?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>ui</a>/<a href='/~lantw44/cgit/tangerine-wallet-browser/diff/ui/app?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>app</a>/<a href='/~lantw44/cgit/tangerine-wallet-browser/diff/ui/app/components?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>components</a>/<a href='/~lantw44/cgit/tangerine-wallet-browser/diff/ui/app/components/send?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>send</a>/<a href='/~lantw44/cgit/tangerine-wallet-browser/diff/ui/app/components/send/currency-display?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>currency-display</a>/<a href='/~lantw44/cgit/tangerine-wallet-browser/diff/ui/app/components/send/currency-display/tests?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>tests</a>/<a href='/~lantw44/cgit/tangerine-wallet-browser/diff/ui/app/components/send/currency-display/tests/currency-display.test.js?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>currency-display.test.js</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='id' value='db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><div class='diffstat-header'><a href='/~lantw44/cgit/tangerine-wallet-browser/diff/?id=db30bbce4c0d977e4efe901fddc46fbe5a6aaac4'>Diffstat</a> (limited to 'ui/app/components/send/currency-display/tests/currency-display.test.js')</div><table summary='diffstat' class='diffstat'>