annotate libfdproto/portability.c @ 1562:6219359a36a9 default tip

Merge latest changes from proposed branch
author Sebastien Decugis <sdecugis@freediameter.net>
date Mon, 21 Jun 2021 19:08:18 +0800
parents 2eb6882b20c6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
836
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
1 /*********************************************************************************************************
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
4 * *
837
1d2721778c7a Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 836
diff changeset
5 * Copyright (c) 2012, WIDE Project and NICT *
836
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
6 * All rights reserved. *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
7 * *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
10 * *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
13 * following disclaimer. *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
14 * *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
18 * materials provided with the distribution. *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
19 * *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
22 * promote products derived from this software without *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
24 * NICT. *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
25 * *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
34 *********************************************************************************************************/
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
35
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
36 #include "fdproto-internal.h"
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
37
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
38 /* Replacement for clock_gettime for the Mac OS */
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
39 #ifndef HAVE_CLOCK_GETTIME
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
40 int clock_gettime(int clk_id, struct timespec* ts)
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
41 {
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
42 struct timeval tv;
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
43 gettimeofday (&tv, NULL);
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
44 ts->tv_sec = tv.tv_sec;
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
45 ts->tv_nsec = tv.tv_usec * 1000;
855
2eb6882b20c6 Fix return value
Sebastien Decugis <sdecugis@freediameter.net>
parents: 852
diff changeset
46 return 0;
836
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
47 }
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
48 #endif /* HAVE_CLOCK_GETTIME */
849
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
49
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
50 /* Replacement for strndup for the Mac OS */
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
51 #ifndef HAVE_STRNDUP
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
52 char * strndup (char *str, size_t len)
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
53 {
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
54 char * output;
851
536e8d11edee Avoid using strnlen since it is also missing from Mac OS X
Sebastien Decugis <sdecugis@freediameter.net>
parents: 849
diff changeset
55 size_t outlen;
536e8d11edee Avoid using strnlen since it is also missing from Mac OS X
Sebastien Decugis <sdecugis@freediameter.net>
parents: 849
diff changeset
56
536e8d11edee Avoid using strnlen since it is also missing from Mac OS X
Sebastien Decugis <sdecugis@freediameter.net>
parents: 849
diff changeset
57 output = memchr(str, 0, len);
536e8d11edee Avoid using strnlen since it is also missing from Mac OS X
Sebastien Decugis <sdecugis@freediameter.net>
parents: 849
diff changeset
58 if (output == NULL) {
536e8d11edee Avoid using strnlen since it is also missing from Mac OS X
Sebastien Decugis <sdecugis@freediameter.net>
parents: 849
diff changeset
59 outlen = len;
536e8d11edee Avoid using strnlen since it is also missing from Mac OS X
Sebastien Decugis <sdecugis@freediameter.net>
parents: 849
diff changeset
60 } else {
852
Sebastien Decugis <sdecugis@freediameter.net>
parents: 851
diff changeset
61 outlen = output - str;
851
536e8d11edee Avoid using strnlen since it is also missing from Mac OS X
Sebastien Decugis <sdecugis@freediameter.net>
parents: 849
diff changeset
62 }
536e8d11edee Avoid using strnlen since it is also missing from Mac OS X
Sebastien Decugis <sdecugis@freediameter.net>
parents: 849
diff changeset
63
849
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
64 CHECK_MALLOC_DO( output = malloc (outlen + 1), return NULL );
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
65
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
66 output[outlen] = '\0';
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
67 memcpy (output, str, outlen);
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
68 return output;
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
69 }
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 837
diff changeset
70 #endif /* HAVE_STRNDUP */
"Welcome to our mercurial repository"