{"action":"created","comment":{"url":"https://api.github.com/repos/OSGeo/proj.4/pulls/comments/155767620","pull_request_review_id":82142948,"id":155767620,"diff_hunk":"@@ -134,36 +136,193 @@ size_t pj_strlcpy(char *dst, const char *src, size_t siz) {\n  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n+ *\n \n-  Source: http://www.i-pi.com/Training/EthicalHacking/Solutions/strlcpy.c\n+  Source: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/string/strlcpy.c\n \n-********************************************************************/\n-    register char *d = dst;\n-    register const char *s = src;\n-    register size_t n = siz;\n+***************************************************************************************/\n+    const char *osrc = src;\n+    size_t nleft = dsize;\n \n-    /* Copy as many bytes as will fit */\n-    if (n != 0 && --n != 0) {\n-        do {\n-            if ((*d++ = *s++) == 0)\n+    /* Copy as many bytes as will fit. */\n+    if (nleft != 0) {\n+        while (--nleft != 0) {\n+            if ((*dst++ = *src++) == '\\0')\n                 break;\n-        } while (--n != 0);\n+        }\n     }\n \n-    /* Not enough room in dst, add NUL and traverse rest of src */\n-    if (n == 0) {\n-        if (siz != 0)\n-            *d = '\\0';      /* NUL-terminate dst */\n-        while (*s++)\n+    /* Not enough room in dst, add NUL and traverse rest of src. */\n+    if (nleft == 0) {\n+        if (dsize != 0)\n+            *dst = '\\0';\t\t/* NUL-terminate dst */\n+        while (*src++)\n             ;\n     }\n \n-    return(s - src - 1);    /* count does not include NUL */\n+    return(src - osrc - 1);\t/* count does not include NUL */\n+}\n+\n+\n+\n+/***************************************************************************************/\n+char *pj_chomp (char *c) {\n+/****************************************************************************************\n+    Strip pre- and postfix whitespace. Note: Inline comments (indicated by '#')\n+    are considered whitespace.\n+****************************************************************************************/\n+    size_t i, n;\n+    char *comment;\n+    if (0==c)\n+        return 0;\n+    comment = strchr (c, '#');\n+    if (comment)\n+        *comment = 0;\n+    n = strlen (c);\n+    for (i = n - 1;  (i >= 1)  &&  (isspace (c[i]) || ';'==c[i]);  i--)\n+        c[i] = 0;\n+    for (n = 0; isspace (c[n]); n++);\n+    for (i = 0;  0 != c[i + n];  i++)\n+        c[i] = c[i + n];\n+    c[i] = 0;\n+    return c;\n+}\n+\n+\n+/***************************************************************************************/\n+char *pj_shrink (char *c) {\n+/****************************************************************************************\n+    Clash repeated whitespace, remove '+' and ';', make ',' and '=' greedy, eating\n+    their surrounding whitespace.\n+****************************************************************************************/\n+    size_t i, j, n, ws;\n+\n+    if (0==c)\n+       return 0;\n+\n+    pj_chomp (c);\n+    n = strlen (c);\n+\n+    /* First clash repeated whitespace (including +/;) */\n+    for (i = j = ws = 0;  j < n;  j++) {\n+\n+        /* Blank out prefix '+', only if preceeded by whitespace (i.e. keep it in 1.23e+08 */\n+        if ((i > 0) && ('+'==c[j]) && isspace (c[i]))\n+            c[j] = ' ';\n+\n+        if (isspace (c[j]) || ';'==c[j] || '\\\\'==c[j]) {\n+            if (0==ws && (i > 0))\n+                c[i++] = ' ';\n+            ws = 1;\n+            continue;\n+        }\n+        else\n+            ws = 0;\n+        c[i++] = c[j];\n+    }\n+    c[i] = 0;\n+    n = strlen(c);\n+\n+    /* Then make ',' and '=' greedy */\n+    for (i = j = 0; j < n; j++) {\n+        if (i==0) {\n+            c[i++] = c[j];\n+            continue;\n+        }\n+\n+        /* Skip space before '='/',' */\n+        if ('='==c[j] || ','==c[j]) {\n+            if (c[i - 1]==' ')\n+               c[i - 1] = c[j];\n+            else\n+                c[i++] = c[j];\n+            continue;\n+        }\n+\n+        if (' '==c[j] && ('='==c[i - 1] || ','==c[i - 1]) )\n+            continue;\n+\n+        c[i++] = c[j];\n+    }\n+    c[i] = 0;\n+    return c;\n }\n \n \n \n-/* stuff below is *not* considered API, and will be moved to an \"internal plumbing toolset\" */\n+\n+/***************************************************************************************/\n+size_t pj_trim_args (char *args) {\n+/****************************************************************************************\n+    Trim an argument string and count its number of elements.\n+****************************************************************************************/\n+    size_t i, m, n;\n+    pj_shrink (args);\n+    n = strlen (args);\n+    if (n==0)\n+        return 0;\n+    for (i = m = 0;  i < n;  i++) {\n+        if (' '==args[i]) {\n+            args[i] = 0;\n+            m++;\n+        }\n+    }\n+    return m + 1;\n+}\n+\n+\n+/***************************************************************************************/\n+char **pj_trimmed_args_to_argv (size_t argc, char *args) {\n+/****************************************************************************************\n+    Create an argv-style array from elements placed in args.\n+\n+    args is a trimmed string as returned by pj_trim_args(), and argv is the number of\n+    trimmed strings found (i.e. the return value of pj_trim_args()).\n+****************************************************************************************/\n+    size_t i, j;\n+    char **argv;\n+    /* turn the massaged input into an array of strings */\n+    argv = (char **) calloc (argc, sizeof (char *));\n+    if (0==argv)\n+        return 0;\n+    argv[0] = args;\n+    for (i = 0, j = 1;  ;  i++) {\n+        if (0==args[i]) {\n+            argv[j++] = args + (i + 1);\n+        }\n+        if (j==argc)\n+            break;\n+    }\n+    return argv;\n+}\n+\n+\n+\n+/***************************************************************************************/\n+char *pj_free_format_from_argc_argv (size_t argc, const char **argv) {\n+/****************************************************************************************\n+    Convert free format command line input to something proj_create can eat.\n+****************************************************************************************/\n+    size_t i, n;\n+    char *p;","path":"src/pj_internal.c","position":225,"original_position":217,"commit_id":"b7cb8077ed60047781907c11c7bb885f55b89017","original_commit_id":"b60e0cc9434d08e79465d89a0eb1d9e59956bf83","user":{"login":"aaronpuchert","id":1453952,"avatar_url":"https://avatars1.githubusercontent.com/u/1453952?v=4","gravatar_id":"","url":"https://api.github.com/users/aaronpuchert","html_url":"https://github.com/aaronpuchert","followers_url":"https://api.github.com/users/aaronpuchert/followers","following_url":"https://api.github.com/users/aaronpuchert/following{/other_user}","gists_url":"https://api.github.com/users/aaronpuchert/gists{/gist_id}","starred_url":"https://api.github.com/users/aaronpuchert/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aaronpuchert/subscriptions","organizations_url":"https://api.github.com/users/aaronpuchert/orgs","repos_url":"https://api.github.com/users/aaronpuchert/repos","events_url":"https://api.github.com/users/aaronpuchert/events{/privacy}","received_events_url":"https://api.github.com/users/aaronpuchert/received_events","type":"User","site_admin":false},"body":"See `CONTRIBUTING.md`, section \"Programming language\":\r\n\r\n> PROJ.4 is developed strictly in ANSI C 89.\r\n\r\nWhich means variables can't be declared within loop headers.\r\n\r\nCompilers are also able to detect if variables are used uninitialized, so I think this can go either way.","created_at":"2017-12-08T12:32:23Z","updated_at":"2017-12-08T12:32:23Z","html_url":"https://github.com/OSGeo/proj.4/pull/693#discussion_r155767620","pull_request_url":"https://api.github.com/repos/OSGeo/proj.4/pulls/693","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/OSGeo/proj.4/pulls/comments/155767620"},"html":{"href":"https://github.com/OSGeo/proj.4/pull/693#discussion_r155767620"},"pull_request":{"href":"https://api.github.com/repos/OSGeo/proj.4/pulls/693"}},"in_reply_to_id":155594786},"pull_request":{"url":"https://api.github.com/repos/OSGeo/proj.4/pulls/693","id":156667340,"html_url":"https://github.com/OSGeo/proj.4/pull/693","diff_url":"https://github.com/OSGeo/proj.4/pull/693.diff","patch_url":"https://github.com/OSGeo/proj.4/pull/693.patch","issue_url":"https://api.github.com/repos/OSGeo/proj.4/issues/693","number":693,"state":"open","locked":false,"title":"Free format everywhere","user":{"login":"busstoptaktik","id":5608365,"avatar_url":"https://avatars3.githubusercontent.com/u/5608365?v=4","gravatar_id":"","url":"https://api.github.com/users/busstoptaktik","html_url":"https://github.com/busstoptaktik","followers_url":"https://api.github.com/users/busstoptaktik/followers","following_url":"https://api.github.com/users/busstoptaktik/following{/other_user}","gists_url":"https://api.github.com/users/busstoptaktik/gists{/gist_id}","starred_url":"https://api.github.com/users/busstoptaktik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/busstoptaktik/subscriptions","organizations_url":"https://api.github.com/users/busstoptaktik/orgs","repos_url":"https://api.github.com/users/busstoptaktik/repos","events_url":"https://api.github.com/users/busstoptaktik/events{/privacy}","received_events_url":"https://api.github.com/users/busstoptaktik/received_events","type":"User","site_admin":false},"body":"This PR (hopefully) finalizes the free formatting work started in PR #691: Free formatting can now be used everywhere - in gie test files, in definition files (such as epsg), and on the `cct` command line (for backwards compatibility, this has not been enabled in `proj` and `cs2cs`).\r\n\r\nIn `cct`, free format on the command line is indicated by using the `--` operator to separate operation definition and input files (this has historically been used in the Unix world whenever options and input files could be mistaken for each other, e.g. when one input file was named `-starts-with-minus`).\r\n\r\nThe free format, and the orthogonality of the init and gie syntaxes make it possible to interleave system definition and system validation blocks in the same file. This is demonstrated in the file `nad/val_def.demo`.\r\n\r\nTouching the input format is a major operation, so this PR is complex, and touches code here, there and everywhere - sometimes in surprising places. The latter mostly, because some detours during development, for various reasons were only partially rolled back (i.e. \"keep improvements, roll back mistakes\").\r\n\r\nAll in all, however, I'm quite confident that this PR is an improvement.","created_at":"2017-12-06T08:26:33Z","updated_at":"2017-12-08T12:32:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1026e5af1de034b41c1806c1ae12c0f3bd834b9e","assignee":{"login":"busstoptaktik","id":5608365,"avatar_url":"https://avatars3.githubusercontent.com/u/5608365?v=4","gravatar_id":"","url":"https://api.github.com/users/busstoptaktik","html_url":"https://github.com/busstoptaktik","followers_url":"https://api.github.com/users/busstoptaktik/followers","following_url":"https://api.github.com/users/busstoptaktik/following{/other_user}","gists_url":"https://api.github.com/users/busstoptaktik/gists{/gist_id}","starred_url":"https://api.github.com/users/busstoptaktik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/busstoptaktik/subscriptions","organizations_url":"https://api.github.com/users/busstoptaktik/orgs","repos_url":"https://api.github.com/users/busstoptaktik/repos","events_url":"https://api.github.com/users/busstoptaktik/events{/privacy}","received_events_url":"https://api.github.com/users/busstoptaktik/received_events","type":"User","site_admin":false},"assignees":[{"login":"busstoptaktik","id":5608365,"avatar_url":"https://avatars3.githubusercontent.com/u/5608365?v=4","gravatar_id":"","url":"https://api.github.com/users/busstoptaktik","html_url":"https://github.com/busstoptaktik","followers_url":"https://api.github.com/users/busstoptaktik/followers","following_url":"https://api.github.com/users/busstoptaktik/following{/other_user}","gists_url":"https://api.github.com/users/busstoptaktik/gists{/gist_id}","starred_url":"https://api.github.com/users/busstoptaktik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/busstoptaktik/subscriptions","organizations_url":"https://api.github.com/users/busstoptaktik/orgs","repos_url":"https://api.github.com/users/busstoptaktik/repos","events_url":"https://api.github.com/users/busstoptaktik/events{/privacy}","received_events_url":"https://api.github.com/users/busstoptaktik/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"milestone":{"url":"https://api.github.com/repos/OSGeo/proj.4/milestones/7","html_url":"https://github.com/OSGeo/proj.4/milestone/7","labels_url":"https://api.github.com/repos/OSGeo/proj.4/milestones/7/labels","id":1197535,"number":7,"title":"4.10.0","description":"","creator":{"login":"rouault","id":1192433,"avatar_url":"https://avatars2.githubusercontent.com/u/1192433?v=4","gravatar_id":"","url":"https://api.github.com/users/rouault","html_url":"https://github.com/rouault","followers_url":"https://api.github.com/users/rouault/followers","following_url":"https://api.github.com/users/rouault/following{/other_user}","gists_url":"https://api.github.com/users/rouault/gists{/gist_id}","starred_url":"https://api.github.com/users/rouault/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rouault/subscriptions","organizations_url":"https://api.github.com/users/rouault/orgs","repos_url":"https://api.github.com/users/rouault/repos","events_url":"https://api.github.com/users/rouault/events{/privacy}","received_events_url":"https://api.github.com/users/rouault/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":14,"state":"open","created_at":"2015-07-07T19:48:22Z","updated_at":"2017-12-07T07:23:35Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/OSGeo/proj.4/pulls/693/commits","review_comments_url":"https://api.github.com/repos/OSGeo/proj.4/pulls/693/comments","review_comment_url":"https://api.github.com/repos/OSGeo/proj.4/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OSGeo/proj.4/issues/693/comments","statuses_url":"https://api.github.com/repos/OSGeo/proj.4/statuses/b7cb8077ed60047781907c11c7bb885f55b89017","head":{"label":"busstoptaktik:gie_improved","ref":"gie_improved","sha":"b7cb8077ed60047781907c11c7bb885f55b89017","user":{"login":"busstoptaktik","id":5608365,"avatar_url":"https://avatars3.githubusercontent.com/u/5608365?v=4","gravatar_id":"","url":"https://api.github.com/users/busstoptaktik","html_url":"https://github.com/busstoptaktik","followers_url":"https://api.github.com/users/busstoptaktik/followers","following_url":"https://api.github.com/users/busstoptaktik/following{/other_user}","gists_url":"https://api.github.com/users/busstoptaktik/gists{/gist_id}","starred_url":"https://api.github.com/users/busstoptaktik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/busstoptaktik/subscriptions","organizations_url":"https://api.github.com/users/busstoptaktik/orgs","repos_url":"https://api.github.com/users/busstoptaktik/repos","events_url":"https://api.github.com/users/busstoptaktik/events{/privacy}","received_events_url":"https://api.github.com/users/busstoptaktik/received_events","type":"User","site_admin":false},"repo":{"id":94321100,"name":"proj.4","full_name":"busstoptaktik/proj.4","owner":{"login":"busstoptaktik","id":5608365,"avatar_url":"https://avatars3.githubusercontent.com/u/5608365?v=4","gravatar_id":"","url":"https://api.github.com/users/busstoptaktik","html_url":"https://github.com/busstoptaktik","followers_url":"https://api.github.com/users/busstoptaktik/followers","following_url":"https://api.github.com/users/busstoptaktik/following{/other_user}","gists_url":"https://api.github.com/users/busstoptaktik/gists{/gist_id}","starred_url":"https://api.github.com/users/busstoptaktik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/busstoptaktik/subscriptions","organizations_url":"https://api.github.com/users/busstoptaktik/orgs","repos_url":"https://api.github.com/users/busstoptaktik/repos","events_url":"https://api.github.com/users/busstoptaktik/events{/privacy}","received_events_url":"https://api.github.com/users/busstoptaktik/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/busstoptaktik/proj.4","description":"PROJ.4 - Cartographic Projections Library","fork":true,"url":"https://api.github.com/repos/busstoptaktik/proj.4","forks_url":"https://api.github.com/repos/busstoptaktik/proj.4/forks","keys_url":"https://api.github.com/repos/busstoptaktik/proj.4/keys{/key_id}","collaborators_url":"https://api.github.com/repos/busstoptaktik/proj.4/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/busstoptaktik/proj.4/teams","hooks_url":"https://api.github.com/repos/busstoptaktik/proj.4/hooks","issue_events_url":"https://api.github.com/repos/busstoptaktik/proj.4/issues/events{/number}","events_url":"https://api.github.com/repos/busstoptaktik/proj.4/events","assignees_url":"https://api.github.com/repos/busstoptaktik/proj.4/assignees{/user}","branches_url":"https://api.github.com/repos/busstoptaktik/proj.4/branches{/branch}","tags_url":"https://api.github.com/repos/busstoptaktik/proj.4/tags","blobs_url":"https://api.github.com/repos/busstoptaktik/proj.4/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/busstoptaktik/proj.4/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/busstoptaktik/proj.4/git/refs{/sha}","trees_url":"https://api.github.com/repos/busstoptaktik/proj.4/git/trees{/sha}","statuses_url":"https://api.github.com/repos/busstoptaktik/proj.4/statuses/{sha}","languages_url":"https://api.github.com/repos/busstoptaktik/proj.4/languages","stargazers_url":"https://api.github.com/repos/busstoptaktik/proj.4/stargazers","contributors_url":"https://api.github.com/repos/busstoptaktik/proj.4/contributors","subscribers_url":"https://api.github.com/repos/busstoptaktik/proj.4/subscribers","subscription_url":"https://api.github.com/repos/busstoptaktik/proj.4/subscription","commits_url":"https://api.github.com/repos/busstoptaktik/proj.4/commits{/sha}","git_commits_url":"https://api.github.com/repos/busstoptaktik/proj.4/git/commits{/sha}","comments_url":"https://api.github.com/repos/busstoptaktik/proj.4/comments{/number}","issue_comment_url":"https://api.github.com/repos/busstoptaktik/proj.4/issues/comments{/number}","contents_url":"https://api.github.com/repos/busstoptaktik/proj.4/contents/{+path}","compare_url":"https://api.github.com/repos/busstoptaktik/proj.4/compare/{base}...{head}","merges_url":"https://api.github.com/repos/busstoptaktik/proj.4/merges","archive_url":"https://api.github.com/repos/busstoptaktik/proj.4/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/busstoptaktik/proj.4/downloads","issues_url":"https://api.github.com/repos/busstoptaktik/proj.4/issues{/number}","pulls_url":"https://api.github.com/repos/busstoptaktik/proj.4/pulls{/number}","milestones_url":"https://api.github.com/repos/busstoptaktik/proj.4/milestones{/number}","notifications_url":"https://api.github.com/repos/busstoptaktik/proj.4/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/busstoptaktik/proj.4/labels{/name}","releases_url":"https://api.github.com/repos/busstoptaktik/proj.4/releases{/id}","deployments_url":"https://api.github.com/repos/busstoptaktik/proj.4/deployments","created_at":"2017-06-14T10:55:29Z","updated_at":"2017-06-14T10:55:32Z","pushed_at":"2017-12-08T06:59:40Z","git_url":"git://github.com/busstoptaktik/proj.4.git","ssh_url":"git@github.com:busstoptaktik/proj.4.git","clone_url":"https://github.com/busstoptaktik/proj.4.git","svn_url":"https://github.com/busstoptaktik/proj.4","homepage":"http://proj4.org","size":169295,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"OSGeo:master","ref":"master","sha":"39186c234bd9e61c880fc6f2e9bc484a12de57ff","user":{"login":"OSGeo","id":1058467,"avatar_url":"https://avatars3.githubusercontent.com/u/1058467?v=4","gravatar_id":"","url":"https://api.github.com/users/OSGeo","html_url":"https://github.com/OSGeo","followers_url":"https://api.github.com/users/OSGeo/followers","following_url":"https://api.github.com/users/OSGeo/following{/other_user}","gists_url":"https://api.github.com/users/OSGeo/gists{/gist_id}","starred_url":"https://api.github.com/users/OSGeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OSGeo/subscriptions","organizations_url":"https://api.github.com/users/OSGeo/orgs","repos_url":"https://api.github.com/users/OSGeo/repos","events_url":"https://api.github.com/users/OSGeo/events{/privacy}","received_events_url":"https://api.github.com/users/OSGeo/received_events","type":"Organization","site_admin":false},"repo":{"id":36057261,"name":"proj.4","full_name":"OSGeo/proj.4","owner":{"login":"OSGeo","id":1058467,"avatar_url":"https://avatars3.githubusercontent.com/u/1058467?v=4","gravatar_id":"","url":"https://api.github.com/users/OSGeo","html_url":"https://github.com/OSGeo","followers_url":"https://api.github.com/users/OSGeo/followers","following_url":"https://api.github.com/users/OSGeo/following{/other_user}","gists_url":"https://api.github.com/users/OSGeo/gists{/gist_id}","starred_url":"https://api.github.com/users/OSGeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OSGeo/subscriptions","organizations_url":"https://api.github.com/users/OSGeo/orgs","repos_url":"https://api.github.com/users/OSGeo/repos","events_url":"https://api.github.com/users/OSGeo/events{/privacy}","received_events_url":"https://api.github.com/users/OSGeo/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OSGeo/proj.4","description":"PROJ.4 - Cartographic Projections Library","fork":false,"url":"https://api.github.com/repos/OSGeo/proj.4","forks_url":"https://api.github.com/repos/OSGeo/proj.4/forks","keys_url":"https://api.github.com/repos/OSGeo/proj.4/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OSGeo/proj.4/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OSGeo/proj.4/teams","hooks_url":"https://api.github.com/repos/OSGeo/proj.4/hooks","issue_events_url":"https://api.github.com/repos/OSGeo/proj.4/issues/events{/number}","events_url":"https://api.github.com/repos/OSGeo/proj.4/events","assignees_url":"https://api.github.com/repos/OSGeo/proj.4/assignees{/user}","branches_url":"https://api.github.com/repos/OSGeo/proj.4/branches{/branch}","tags_url":"https://api.github.com/repos/OSGeo/proj.4/tags","blobs_url":"https://api.github.com/repos/OSGeo/proj.4/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OSGeo/proj.4/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OSGeo/proj.4/git/refs{/sha}","trees_url":"https://api.github.com/repos/OSGeo/proj.4/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OSGeo/proj.4/statuses/{sha}","languages_url":"https://api.github.com/repos/OSGeo/proj.4/languages","stargazers_url":"https://api.github.com/repos/OSGeo/proj.4/stargazers","contributors_url":"https://api.github.com/repos/OSGeo/proj.4/contributors","subscribers_url":"https://api.github.com/repos/OSGeo/proj.4/subscribers","subscription_url":"https://api.github.com/repos/OSGeo/proj.4/subscription","commits_url":"https://api.github.com/repos/OSGeo/proj.4/commits{/sha}","git_commits_url":"https://api.github.com/repos/OSGeo/proj.4/git/commits{/sha}","comments_url":"https://api.github.com/repos/OSGeo/proj.4/comments{/number}","issue_comment_url":"https://api.github.com/repos/OSGeo/proj.4/issues/comments{/number}","contents_url":"https://api.github.com/repos/OSGeo/proj.4/contents/{+path}","compare_url":"https://api.github.com/repos/OSGeo/proj.4/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OSGeo/proj.4/merges","archive_url":"https://api.github.com/repos/OSGeo/proj.4/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OSGeo/proj.4/downloads","issues_url":"https://api.github.com/repos/OSGeo/proj.4/issues{/number}","pulls_url":"https://api.github.com/repos/OSGeo/proj.4/pulls{/number}","milestones_url":"https://api.github.com/repos/OSGeo/proj.4/milestones{/number}","notifications_url":"https://api.github.com/repos/OSGeo/proj.4/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OSGeo/proj.4/labels{/name}","releases_url":"https://api.github.com/repos/OSGeo/proj.4/releases{/id}","deployments_url":"https://api.github.com/repos/OSGeo/proj.4/deployments","created_at":"2015-05-22T07:00:08Z","updated_at":"2017-12-05T03:31:58Z","pushed_at":"2017-12-08T10:20:19Z","git_url":"git://github.com/OSGeo/proj.4.git","ssh_url":"git@github.com:OSGeo/proj.4.git","clone_url":"https://github.com/OSGeo/proj.4.git","svn_url":"https://github.com/OSGeo/proj.4","homepage":"http://proj4.org","size":233914,"stargazers_count":363,"watchers_count":363,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":172,"mirror_url":null,"archived":false,"open_issues_count":55,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":172,"open_issues":55,"watchers":363,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OSGeo/proj.4/pulls/693"},"html":{"href":"https://github.com/OSGeo/proj.4/pull/693"},"issue":{"href":"https://api.github.com/repos/OSGeo/proj.4/issues/693"},"comments":{"href":"https://api.github.com/repos/OSGeo/proj.4/issues/693/comments"},"review_comments":{"href":"https://api.github.com/repos/OSGeo/proj.4/pulls/693/comments"},"review_comment":{"href":"https://api.github.com/repos/OSGeo/proj.4/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OSGeo/proj.4/pulls/693/commits"},"statuses":{"href":"https://api.github.com/repos/OSGeo/proj.4/statuses/b7cb8077ed60047781907c11c7bb885f55b89017"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"aaronpuchert"}}