File: string.h

package info (click to toggle)
pwntools 4.15.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,508 kB
  • sloc: python: 59,870; ansic: 48,351; asm: 45,047; sh: 396; makefile: 256
file content (157 lines) | stat: -rw-r--r-- 6,589 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#ifndef _STRING_H
#define _STRING_H

#include <sys/cdefs.h>
#include <sys/types.h>

__BEGIN_DECLS

__readmem__(2) __writemem__(1)
char *strcpy(char* __restrict__ dest, const char* __restrict__ src) __THROW __nonnull((1,2));

__readmemsz__(2,4) __writememsz__(1,4)
void *memccpy(void* __restrict__ dest, const void* __restrict__ src, int c, size_t n) __THROW __nonnull((1,2));
__readmemsz__(2,3) __writememsz__(1,3)
void *memmove(void* dest, const void *src, size_t n) __THROW __nonnull((1,2));

__readmemsz__(1,3) __readmemsz__(2,3)
int memccmp(const void* s1, const void* s2, int c, size_t n) __THROW __pure __nonnull((1,2));

__writememsz__(1,3)
void* memset(void* s, int c, size_t n) __THROW __nonnull((1));
__readmemsz__(1,3) __readmemsz__(2,3)
int memcmp(const void* s1, const void* s2, size_t n) __THROW __pure __nonnull((1,2));
__writememsz__(1,3) __readmemsz__(2,3)
void* memcpy(void* __restrict__ dest, const void* __restrict__ src, size_t n) __THROW __nonnull((1,2));

__writememsz__(1,3) __readmem__(2)
char *strncpy(char* __restrict__ dest, const char* __restrict__ src, size_t n) __THROW __nonnull((1,2));
__readmemsz__(1,3) __readmemsz__(2,3)
int strncmp(const char* s1, const char* s2, size_t n) __THROW __pure __nonnull((1,2));

__writemem__(1) __readmem__(2)
char *strcat(char* __restrict__ dest, const char* __restrict__ src) __THROW __nonnull((1,2));
__writememsz__(1,3) __readmem__(2)
char *strncat(char* __restrict__ dest, const char* __restrict__ src, size_t n) __THROW __nonnull((1,2));

__readmem__(1) __readmem__(2)
int strcmp(const char *s1, const char *s2) __THROW __pure __nonnull((1,2));

__readmem__(1)
size_t strlen(const char *s) __THROW __pure __nonnull((1));
__readmemsz__(1,2)
size_t strnlen(const char *s,size_t maxlen) __THROW __pure __nonnull((1));

#ifdef _GNU_SOURCE
__readmem__(1) __readmem__(2)
int strverscmp(const char* s1,const char* s2) __THROW __pure __nonnull((1,2));
#endif

__readmem__(1) __readmem__(2)
char *strstr(const char *haystack, const char *needle) __THROW __pure __nonnull((1,2));

__readmem__(1)
char *strdup(const char *s) __THROW __attribute_malloc__ __nonnull((1));

__readmem__(1)
char *strchr(const char *s, int c) __THROW __pure __nonnull((1));
__readmem__(1)
char *strrchr(const char *s, int c) __THROW __pure __nonnull((1));

__readmem__(1) __readmem__(2)
size_t strspn(const char *s, const char *_accept) __THROW __nonnull((1,2));
__readmem__(1) __readmem__(2)
size_t strcspn(const char *s, const char *reject) __THROW __nonnull((1,2));

__readmem__(1) __readmem__(2)
char *strpbrk(const char *s, const char *_accept) __THROW __nonnull((1,2));
__readmem__(1) __readmem__(2)
char *strsep(char ** __restrict__ stringp, const char * __restrict__ delim) __THROW __nonnull((1,2));

__readmemsz__(1,3)
void* memchr(const void *s, int c, size_t n) __THROW __pure __nonnull((1));
#ifdef _GNU_SOURCE
__readmemsz__(1,3)
void* memrchr(const void *s, int c, size_t n) __THROW __pure __nonnull((1));
#endif

/* I would like to make this const, but Paul Jarc points out it has to
 * be char* :-( */
char *strerror(int errnum) __THROW __attribute_const__;
/* work around b0rken GNU crapware like tar 1.13.19 */
#define strerror strerror
__writememsz__(2,3)
int strerror_r(int errnum,char* buf,size_t n) __THROW __attribute_dontuse__;

#ifdef _GNU_SOURCE
char *strsignal(int signum) __THROW __attribute_const__;
__readmemsz__(1,2) __readmemsz__(3,4)
void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) __THROW __nonnull((1,3));

__writememsz__(1,3) __readmemsz__(2,3)
void* mempcpy(void* __restrict__ dest,const void* __restrict__ src,size_t n) __THROW __nonnull((1,2));

__readmemsz__(1,2)
char *strndup(const char *s,size_t n) __THROW __attribute_malloc__ __nonnull((1));

#define strdupa(s) ({ const char* tmp=s; size_t l=strlen(tmp)+1; char* x=alloca(l); memcpy(x,tmp,l); })
#define strndupa(s,n) ({ const char* tmp=s; const char* y=memchr(tmp,0,(n)); size_t l=y?y-tmp:n; char* x=alloca(l+1); x[l]=0; memcpy(x,tmp,l); })
#endif

__readwritemem__(1)
char *strtok(char * __restrict__ s, const char * __restrict__ delim) __THROW __nonnull((2));
__readwritemem__(1)
char *strtok_r(char * __restrict__ s, const char * __restrict__ delim, char ** __restrict__ ptrptr) __THROW __nonnull((2,3));

__writememsz__(1,3) __readmemsz__(2,3)
size_t strlcpy(char * __restrict__ dst, const char * __restrict__ src, size_t size) __THROW __nonnull((1,2));
__writememsz__(1,3) __readmem__(2)
size_t strlcat(char * __restrict__ dst, const char * __restrict__ src, size_t size) __THROW __nonnull((1,2));

__readmem__(1) __readmem__(2)
int strcoll(const char *s1, const char *s2) __THROW __nonnull((1,2));
__writememsz__(1,3) __readmemsz__(2,3)
size_t strxfrm(char *dest, const char * __restrict__ src, size_t n) __THROW __nonnull((1,2));

#ifdef _BSD_SOURCE
#include <strings.h>
#endif

__writemem__(1) __readmem__(2)
char* stpcpy(char * __restrict__ dest, const char * __restrict__ src) __THROW __nonnull((1,2));
__writememsz__(1,3) __readmemsz__(2,3)
char* stpncpy(char* __restrict__ dest, const char* __restrict__ src, size_t n) __THROW __nonnull((1,2));

#ifdef _GNU_SOURCE
int ffsl(long i) __THROW __attribute_const__;
int ffsll(long long i) __THROW __attribute_const__;
#endif

/* This is an OpenBSD extension that acts like bzero but is hopefully
 * not removed from by the compiler's dead store optimization pass.
 * It is meant for scrubbing crypto keys and passwords from memory after
 * use, so they don't show up in swap files or core dumps. */
__writememsz__(1,2)
void   explicit_bzero(void*, size_t) __THROW __dontinline__;

/* More OpenBSD extensions. These are for comparing passwords and hashes
 * without leaking timing information on how long the common prefix was.
 * The comparison always compares all the bytes, even if there is a
 * mismatch early on. */
__readmemsz__(1,3) __readmemsz__(2,3)
int timingsafe_memcmp(const void* s1, const void* s2, size_t n) __THROW __nonnull((1,2)) __dontinline__;
__readmemsz__(1,3) __readmemsz__(2,3)
int timingsafe_bcmp(const void* s1, const void* s2, size_t n) __THROW __nonnull((1,2)) __dontinline__;

/* NetBSD has its own extension that is happened to be mentioned in the
 * Linux man page for memcmp, so we support it, too */
__readmemsz__(1,3) __readmemsz__(2,3)
int consttime_memequal(void *b1, void *b2, size_t len) __THROW __nonnull((1,2)) __dontinline__;

/* NetBSD also has its own extension for memset :-( */
__writememsz__(1,3)
void* explicit_memset(void *b, int c, size_t len) __THROW __nonnull((1)) __dontinline__;

__END_DECLS

#endif