* [FFmpeg-devel] [PATCH 1/2] avformat/utils: handle errors > 0 in avformat_network_init() @ 2024-04-19 16:59 Andrew Sayers 2024-04-19 16:59 ` [FFmpeg-devel] [PATCH 2/2] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 2024-04-19 17:04 ` [FFmpeg-devel] [PATCH 1/2] avformat/utils: handle errors > 0 in avformat_network_init() James Almer 0 siblings, 2 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-19 16:59 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/utils.c b/libavformat/utils.c index 4dded7aea4..855723a406 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -560,7 +560,7 @@ int avformat_network_init(void) { #if CONFIG_NETWORK int ret; - if ((ret = ff_network_init()) < 0) + if ((ret = ff_network_init())) return ret; if ((ret = ff_tls_init()) < 0) return ret; -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH 2/2] avformat/avformat: Document return codes for av_format_(de)init 2024-04-19 16:59 [FFmpeg-devel] [PATCH 1/2] avformat/utils: handle errors > 0 in avformat_network_init() Andrew Sayers @ 2024-04-19 16:59 ` Andrew Sayers 2024-04-19 17:04 ` [FFmpeg-devel] [PATCH 1/2] avformat/utils: handle errors > 0 in avformat_network_init() James Almer 1 sibling, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-19 16:59 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avformat.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 8afdcd9fd0..0feaeded0e 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1944,12 +1944,16 @@ const char *avformat_license(void); * This function will be deprecated once support for older GnuTLS and * OpenSSL libraries is removed, and this function has no purpose * anymore. + * + * @return 0 on success, !=0 on error. */ int avformat_network_init(void); /** * Undo the initialization done by avformat_network_init. Call it only * once for each time you called avformat_network_init. + * + * @return 0 on success, !=0 on error. */ int avformat_network_deinit(void); -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] avformat/utils: handle errors > 0 in avformat_network_init() 2024-04-19 16:59 [FFmpeg-devel] [PATCH 1/2] avformat/utils: handle errors > 0 in avformat_network_init() Andrew Sayers 2024-04-19 16:59 ` [FFmpeg-devel] [PATCH 2/2] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers @ 2024-04-19 17:04 ` James Almer 2024-04-19 17:23 ` [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() Andrew Sayers 1 sibling, 1 reply; 34+ messages in thread From: James Almer @ 2024-04-19 17:04 UTC (permalink / raw) To: ffmpeg-devel On 4/19/2024 1:59 PM, Andrew Sayers wrote: > --- > libavformat/utils.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libavformat/utils.c b/libavformat/utils.c > index 4dded7aea4..855723a406 100644 > --- a/libavformat/utils.c > +++ b/libavformat/utils.c > @@ -560,7 +560,7 @@ int avformat_network_init(void) > { > #if CONFIG_NETWORK > int ret; > - if ((ret = ff_network_init()) < 0) > + if ((ret = ff_network_init())) ff_network_init() needs to be fixed to return negative error values instead. This change will make it return 1 on error on Windows. > return ret; > if ((ret = ff_tls_init()) < 0) > return ret; _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() 2024-04-19 17:04 ` [FFmpeg-devel] [PATCH 1/2] avformat/utils: handle errors > 0 in avformat_network_init() James Almer @ 2024-04-19 17:23 ` Andrew Sayers 2024-04-19 17:23 ` [FFmpeg-devel] [PATCH v2 2/2] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 2024-04-19 17:37 ` [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() James Almer 0 siblings, 2 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-19 17:23 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/network.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/network.c b/libavformat/network.c index f752efc411..d518bb0541 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -63,7 +63,7 @@ int ff_network_init(void) if (WSAStartup(MAKEWORD(1,1), &wsaData)) return 0; #endif - return 1; + return -1; } int ff_network_wait_fd(int fd, int write) -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v2 2/2] avformat/avformat: Document return codes for av_format_(de)init 2024-04-19 17:23 ` [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() Andrew Sayers @ 2024-04-19 17:23 ` Andrew Sayers 2024-04-19 17:37 ` [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() James Almer 1 sibling, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-19 17:23 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avformat.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 8afdcd9fd0..ea816a0b22 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1944,12 +1944,16 @@ const char *avformat_license(void); * This function will be deprecated once support for older GnuTLS and * OpenSSL libraries is removed, and this function has no purpose * anymore. + * + * @return 0 on success, <0 on error. */ int avformat_network_init(void); /** * Undo the initialization done by avformat_network_init. Call it only * once for each time you called avformat_network_init. + * + * @return 0 on success, <0 on error. */ int avformat_network_deinit(void); -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() 2024-04-19 17:23 ` [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() Andrew Sayers 2024-04-19 17:23 ` [FFmpeg-devel] [PATCH v2 2/2] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers @ 2024-04-19 17:37 ` James Almer 2024-04-19 19:07 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Andrew Sayers 1 sibling, 1 reply; 34+ messages in thread From: James Almer @ 2024-04-19 17:37 UTC (permalink / raw) To: ffmpeg-devel On 4/19/2024 2:23 PM, Andrew Sayers wrote: > --- > libavformat/network.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libavformat/network.c b/libavformat/network.c > index f752efc411..d518bb0541 100644 > --- a/libavformat/network.c > +++ b/libavformat/network.c > @@ -63,7 +63,7 @@ int ff_network_init(void) > if (WSAStartup(MAKEWORD(1,1), &wsaData)) > return 0; > #endif > - return 1; > + return -1; This will make avformat_network_init() fail on all targets but Windows. Also, there are a lot of ff_network_init() callers that check for 0 as failure and anything else as success. What needs to be done is to make ff_network_init() return ff_neterrno() on WSAStartup() failure and 0 on success on Windows, and 0 for every other target (where there's no chance of failure), and the callers be adapted to check for < 0 and propagate the returned error value if so. > } > > int ff_network_wait_fd(int fd, int write) _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno 2024-04-19 17:37 ` [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() James Almer @ 2024-04-19 19:07 ` Andrew Sayers 2024-04-19 19:08 ` [FFmpeg-devel] [PATCH v3 2/3] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers ` (3 more replies) 0 siblings, 4 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-19 19:07 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers For example, WSAStartup()'s documentation says: "A call to the WSAGetLastError function is not needed and should not be used" --- libavformat/network.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libavformat/network.c b/libavformat/network.c index f752efc411..fb70f9cafc 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -121,9 +121,14 @@ void ff_network_close(void) } #if HAVE_WINSOCK2_H + +} int ff_neterrno(void) { - int err = WSAGetLastError(); + return ff_neterrno2(WSAGetLastError()); +} +int ff_neterrno2(int err) +{ switch (err) { case WSAEWOULDBLOCK: return AVERROR(EAGAIN); -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v3 2/3] avformat/network: Return 0/AVERROR from ff_network_init() 2024-04-19 19:07 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Andrew Sayers @ 2024-04-19 19:08 ` Andrew Sayers 2024-04-19 19:08 ` [FFmpeg-devel] [PATCH v3 3/3] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers ` (2 subsequent siblings) 3 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-19 19:08 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avio.c | 4 ++-- libavformat/network.c | 7 +++---- libavformat/rtsp.c | 12 ++++++------ libavformat/rtspdec.c | 4 ++-- libavformat/sapdec.c | 4 ++-- libavformat/sapenc.c | 4 ++-- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/libavformat/avio.c b/libavformat/avio.c index d109f3adff..f82edec779 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -123,8 +123,8 @@ static int url_alloc_for_protocol(URLContext **puc, const URLProtocol *up, int err; #if CONFIG_NETWORK - if (up->flags & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init()) - return AVERROR(EIO); + if (up->flags & URL_PROTOCOL_FLAG_NETWORK && (err=ff_network_init())<0) + return err; #endif if ((flags & AVIO_FLAG_READ) && !up->url_read) { av_log(NULL, AV_LOG_ERROR, diff --git a/libavformat/network.c b/libavformat/network.c index fb70f9cafc..134869a63f 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -59,11 +59,10 @@ int ff_network_init(void) { #if HAVE_WINSOCK2_H WSADATA wsaData; - - if (WSAStartup(MAKEWORD(1,1), &wsaData)) - return 0; + return ff_neterrno2(WSAStartup(MAKEWORD(1,1), &wsaData)); +#else + return 0; #endif - return 1; } int ff_network_wait_fd(int fd, int write) diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index b0c61ee00a..3db4ed11c2 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -1740,8 +1740,8 @@ int ff_rtsp_connect(AVFormatContext *s) return AVERROR(EINVAL); } - if (!ff_network_init()) - return AVERROR(EIO); + if ((err = ff_network_init())<0) + return err; if (s->max_delay < 0) /* Not set by the caller */ s->max_delay = s->iformat ? DEFAULT_REORDERING_DELAY : 0; @@ -2395,8 +2395,8 @@ static int sdp_read_header(AVFormatContext *s) char url[MAX_URL_SIZE]; AVBPrint bp; - if (!ff_network_init()) - return AVERROR(EIO); + if ((err = ff_network_init())<0) + return err; if (s->max_delay < 0) /* Not set by the caller */ s->max_delay = DEFAULT_REORDERING_DELAY; @@ -2522,8 +2522,8 @@ static int rtp_read_header(AVFormatContext *s) AVBPrint sdp; AVDictionary *opts = NULL; - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; opts = map_to_opts(rt); ret = ffurl_open_whitelist(&in, s->url, AVIO_FLAG_READ, diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index 10078ce2fa..3b0829694e 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -663,8 +663,8 @@ static int rtsp_listen(AVFormatContext *s) int ret; enum RTSPMethod methodcode; - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; /* extract hostname and port */ av_url_split(proto, sizeof(proto), auth, sizeof(auth), host, sizeof(host), diff --git a/libavformat/sapdec.c b/libavformat/sapdec.c index 357c0dd514..719c26c6b8 100644 --- a/libavformat/sapdec.c +++ b/libavformat/sapdec.c @@ -70,8 +70,8 @@ static int sap_read_header(AVFormatContext *s) int port; int ret, i; - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &port, path, sizeof(path), s->url); diff --git a/libavformat/sapenc.c b/libavformat/sapenc.c index 87a834a8d8..3305122524 100644 --- a/libavformat/sapenc.c +++ b/libavformat/sapenc.c @@ -80,8 +80,8 @@ static int sap_write_header(AVFormatContext *s) int udp_fd; AVDictionaryEntry* title = av_dict_get(s->metadata, "title", NULL, 0); - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; /* extract hostname and port */ av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &base_port, -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v3 3/3] avformat/avformat: Document return codes for av_format_(de)init 2024-04-19 19:07 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Andrew Sayers 2024-04-19 19:08 ` [FFmpeg-devel] [PATCH v3 2/3] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers @ 2024-04-19 19:08 ` Andrew Sayers 2024-04-20 7:57 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Stefano Sabatini 2024-05-05 19:59 ` [FFmpeg-devel] [PATCH v3 " Marton Balint 3 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-19 19:08 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avformat.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 8afdcd9fd0..f624fb1e2e 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1944,12 +1944,16 @@ const char *avformat_license(void); * This function will be deprecated once support for older GnuTLS and * OpenSSL libraries is removed, and this function has no purpose * anymore. + * + * @return 0 for success or AVERROR code */ int avformat_network_init(void); /** * Undo the initialization done by avformat_network_init. Call it only * once for each time you called avformat_network_init. + * + * @return 0 for success or AVERROR code */ int avformat_network_deinit(void); -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno 2024-04-19 19:07 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Andrew Sayers 2024-04-19 19:08 ` [FFmpeg-devel] [PATCH v3 2/3] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers 2024-04-19 19:08 ` [FFmpeg-devel] [PATCH v3 3/3] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers @ 2024-04-20 7:57 ` Stefano Sabatini 2024-04-20 13:24 ` [FFmpeg-devel] [PATCH v4 " Andrew Sayers 2024-05-05 19:59 ` [FFmpeg-devel] [PATCH v3 " Marton Balint 3 siblings, 1 reply; 34+ messages in thread From: Stefano Sabatini @ 2024-04-20 7:57 UTC (permalink / raw) To: FFmpeg development discussions and patches; +Cc: Andrew Sayers On date Friday 2024-04-19 20:07:59 +0100, Andrew Sayers wrote: > For example, WSAStartup()'s documentation says: > > "A call to the WSAGetLastError function is not needed and should not be used" > --- > libavformat/network.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) missing declaration in network.h? _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v4 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno 2024-04-20 7:57 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Stefano Sabatini @ 2024-04-20 13:24 ` Andrew Sayers 2024-04-20 13:25 ` [FFmpeg-devel] [PATCH v4 2/3] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers ` (2 more replies) 0 siblings, 3 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-20 13:24 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers For example, WSAStartup()'s documentation says: "A call to the WSAGetLastError function is not needed and should not be used" --- libavformat/network.c | 5 ++++- libavformat/network.h | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libavformat/network.c b/libavformat/network.c index f752efc411..f295957aa5 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -123,7 +123,10 @@ void ff_network_close(void) #if HAVE_WINSOCK2_H int ff_neterrno(void) { - int err = WSAGetLastError(); + return ff_neterrno2(WSAGetLastError()); +} +int ff_neterrno2(int err) +{ switch (err) { case WSAEWOULDBLOCK: return AVERROR(EAGAIN); diff --git a/libavformat/network.h b/libavformat/network.h index ca214087fc..84348f52a4 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -58,6 +58,7 @@ #define setsockopt(a, b, c, d, e) setsockopt(a, b, c, (const char*) d, e) int ff_neterrno(void); +int ff_neterrno2(int err); #else #include <sys/types.h> #include <sys/socket.h> @@ -66,6 +67,7 @@ int ff_neterrno(void); #include <netdb.h> #define ff_neterrno() AVERROR(errno) +#define ff_neterrno2(ERRNO) AVERROR(ERRNO) #endif /* HAVE_WINSOCK2_H */ #if HAVE_ARPA_INET_H -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v4 2/3] avformat/network: Return 0/AVERROR from ff_network_init() 2024-04-20 13:24 ` [FFmpeg-devel] [PATCH v4 " Andrew Sayers @ 2024-04-20 13:25 ` Andrew Sayers 2024-05-05 20:05 ` Marton Balint 2024-04-20 13:25 ` [FFmpeg-devel] [PATCH v4 3/3] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 2024-04-27 8:46 ` [FFmpeg-devel] [PATCH v4 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Andrew Sayers 2 siblings, 1 reply; 34+ messages in thread From: Andrew Sayers @ 2024-04-20 13:25 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avio.c | 4 ++-- libavformat/network.c | 7 +++---- libavformat/rtsp.c | 12 ++++++------ libavformat/rtspdec.c | 4 ++-- libavformat/sapdec.c | 4 ++-- libavformat/sapenc.c | 4 ++-- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/libavformat/avio.c b/libavformat/avio.c index d109f3adff..f82edec779 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -123,8 +123,8 @@ static int url_alloc_for_protocol(URLContext **puc, const URLProtocol *up, int err; #if CONFIG_NETWORK - if (up->flags & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init()) - return AVERROR(EIO); + if (up->flags & URL_PROTOCOL_FLAG_NETWORK && (err=ff_network_init())<0) + return err; #endif if ((flags & AVIO_FLAG_READ) && !up->url_read) { av_log(NULL, AV_LOG_ERROR, diff --git a/libavformat/network.c b/libavformat/network.c index f295957aa5..c1b0e69362 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -59,11 +59,10 @@ int ff_network_init(void) { #if HAVE_WINSOCK2_H WSADATA wsaData; - - if (WSAStartup(MAKEWORD(1,1), &wsaData)) - return 0; + return ff_neterrno2(WSAStartup(MAKEWORD(1,1), &wsaData)); +#else + return 0; #endif - return 1; } int ff_network_wait_fd(int fd, int write) diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index b0c61ee00a..3db4ed11c2 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -1740,8 +1740,8 @@ int ff_rtsp_connect(AVFormatContext *s) return AVERROR(EINVAL); } - if (!ff_network_init()) - return AVERROR(EIO); + if ((err = ff_network_init())<0) + return err; if (s->max_delay < 0) /* Not set by the caller */ s->max_delay = s->iformat ? DEFAULT_REORDERING_DELAY : 0; @@ -2395,8 +2395,8 @@ static int sdp_read_header(AVFormatContext *s) char url[MAX_URL_SIZE]; AVBPrint bp; - if (!ff_network_init()) - return AVERROR(EIO); + if ((err = ff_network_init())<0) + return err; if (s->max_delay < 0) /* Not set by the caller */ s->max_delay = DEFAULT_REORDERING_DELAY; @@ -2522,8 +2522,8 @@ static int rtp_read_header(AVFormatContext *s) AVBPrint sdp; AVDictionary *opts = NULL; - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; opts = map_to_opts(rt); ret = ffurl_open_whitelist(&in, s->url, AVIO_FLAG_READ, diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index 10078ce2fa..3b0829694e 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -663,8 +663,8 @@ static int rtsp_listen(AVFormatContext *s) int ret; enum RTSPMethod methodcode; - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; /* extract hostname and port */ av_url_split(proto, sizeof(proto), auth, sizeof(auth), host, sizeof(host), diff --git a/libavformat/sapdec.c b/libavformat/sapdec.c index 357c0dd514..719c26c6b8 100644 --- a/libavformat/sapdec.c +++ b/libavformat/sapdec.c @@ -70,8 +70,8 @@ static int sap_read_header(AVFormatContext *s) int port; int ret, i; - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &port, path, sizeof(path), s->url); diff --git a/libavformat/sapenc.c b/libavformat/sapenc.c index 87a834a8d8..3305122524 100644 --- a/libavformat/sapenc.c +++ b/libavformat/sapenc.c @@ -80,8 +80,8 @@ static int sap_write_header(AVFormatContext *s) int udp_fd; AVDictionaryEntry* title = av_dict_get(s->metadata, "title", NULL, 0); - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; /* extract hostname and port */ av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &base_port, -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v4 2/3] avformat/network: Return 0/AVERROR from ff_network_init() 2024-04-20 13:25 ` [FFmpeg-devel] [PATCH v4 2/3] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers @ 2024-05-05 20:05 ` Marton Balint 2024-05-07 13:12 ` Andrew Sayers 0 siblings, 1 reply; 34+ messages in thread From: Marton Balint @ 2024-05-05 20:05 UTC (permalink / raw) To: FFmpeg development discussions and patches On Sat, 20 Apr 2024, Andrew Sayers wrote: > --- > libavformat/avio.c | 4 ++-- > libavformat/network.c | 7 +++---- > libavformat/rtsp.c | 12 ++++++------ > libavformat/rtspdec.c | 4 ++-- > libavformat/sapdec.c | 4 ++-- > libavformat/sapenc.c | 4 ++-- > 6 files changed, 17 insertions(+), 18 deletions(-) > > diff --git a/libavformat/avio.c b/libavformat/avio.c > index d109f3adff..f82edec779 100644 > --- a/libavformat/avio.c > +++ b/libavformat/avio.c > @@ -123,8 +123,8 @@ static int url_alloc_for_protocol(URLContext **puc, const URLProtocol *up, > int err; > > #if CONFIG_NETWORK > - if (up->flags & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init()) > - return AVERROR(EIO); > + if (up->flags & URL_PROTOCOL_FLAG_NETWORK && (err=ff_network_init())<0) > + return err; > #endif > if ((flags & AVIO_FLAG_READ) && !up->url_read) { > av_log(NULL, AV_LOG_ERROR, > diff --git a/libavformat/network.c b/libavformat/network.c > index f295957aa5..c1b0e69362 100644 > --- a/libavformat/network.c > +++ b/libavformat/network.c > @@ -59,11 +59,10 @@ int ff_network_init(void) > { > #if HAVE_WINSOCK2_H > WSADATA wsaData; > - > - if (WSAStartup(MAKEWORD(1,1), &wsaData)) > - return 0; > + return ff_neterrno2(WSAStartup(MAKEWORD(1,1), &wsaData)); > +#else > + return 0; > #endif > - return 1; > } > > int ff_network_wait_fd(int fd, int write) > diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c > index b0c61ee00a..3db4ed11c2 100644 > --- a/libavformat/rtsp.c > +++ b/libavformat/rtsp.c > @@ -1740,8 +1740,8 @@ int ff_rtsp_connect(AVFormatContext *s) > return AVERROR(EINVAL); > } > > - if (!ff_network_init()) > - return AVERROR(EIO); > + if ((err = ff_network_init())<0) > + return err; Assignments in if conditions should be avoided. So this should be expanded to: err = ff_network_init(); if (err < 0) return err; Same for the rest of the checks later. Thanks, Marton > > if (s->max_delay < 0) /* Not set by the caller */ > s->max_delay = s->iformat ? DEFAULT_REORDERING_DELAY : 0; > @@ -2395,8 +2395,8 @@ static int sdp_read_header(AVFormatContext *s) > char url[MAX_URL_SIZE]; > AVBPrint bp; > > - if (!ff_network_init()) > - return AVERROR(EIO); > + if ((err = ff_network_init())<0) > + return err; > > if (s->max_delay < 0) /* Not set by the caller */ > s->max_delay = DEFAULT_REORDERING_DELAY; > @@ -2522,8 +2522,8 @@ static int rtp_read_header(AVFormatContext *s) > AVBPrint sdp; > AVDictionary *opts = NULL; > > - if (!ff_network_init()) > - return AVERROR(EIO); > + if ((ret = ff_network_init())<0) > + return ret; > > opts = map_to_opts(rt); > ret = ffurl_open_whitelist(&in, s->url, AVIO_FLAG_READ, > diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c > index 10078ce2fa..3b0829694e 100644 > --- a/libavformat/rtspdec.c > +++ b/libavformat/rtspdec.c > @@ -663,8 +663,8 @@ static int rtsp_listen(AVFormatContext *s) > int ret; > enum RTSPMethod methodcode; > > - if (!ff_network_init()) > - return AVERROR(EIO); > + if ((ret = ff_network_init())<0) > + return ret; > > /* extract hostname and port */ > av_url_split(proto, sizeof(proto), auth, sizeof(auth), host, sizeof(host), > diff --git a/libavformat/sapdec.c b/libavformat/sapdec.c > index 357c0dd514..719c26c6b8 100644 > --- a/libavformat/sapdec.c > +++ b/libavformat/sapdec.c > @@ -70,8 +70,8 @@ static int sap_read_header(AVFormatContext *s) > int port; > int ret, i; > > - if (!ff_network_init()) > - return AVERROR(EIO); > + if ((ret = ff_network_init())<0) > + return ret; > > av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &port, > path, sizeof(path), s->url); > diff --git a/libavformat/sapenc.c b/libavformat/sapenc.c > index 87a834a8d8..3305122524 100644 > --- a/libavformat/sapenc.c > +++ b/libavformat/sapenc.c > @@ -80,8 +80,8 @@ static int sap_write_header(AVFormatContext *s) > int udp_fd; > AVDictionaryEntry* title = av_dict_get(s->metadata, "title", NULL, 0); > > - if (!ff_network_init()) > - return AVERROR(EIO); > + if ((ret = ff_network_init())<0) > + return ret; > > /* extract hostname and port */ > av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &base_port, > -- > 2.43.0 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v4 2/3] avformat/network: Return 0/AVERROR from ff_network_init() 2024-05-05 20:05 ` Marton Balint @ 2024-05-07 13:12 ` Andrew Sayers 0 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-07 13:12 UTC (permalink / raw) To: FFmpeg development discussions and patches On Sun, May 05, 2024 at 10:05:36PM +0200, Marton Balint wrote: > > > On Sat, 20 Apr 2024, Andrew Sayers wrote: > > > --- > > libavformat/avio.c | 4 ++-- > > libavformat/network.c | 7 +++---- > > libavformat/rtsp.c | 12 ++++++------ > > libavformat/rtspdec.c | 4 ++-- > > libavformat/sapdec.c | 4 ++-- > > libavformat/sapenc.c | 4 ++-- > > 6 files changed, 17 insertions(+), 18 deletions(-) > > > > diff --git a/libavformat/avio.c b/libavformat/avio.c > > index d109f3adff..f82edec779 100644 > > --- a/libavformat/avio.c > > +++ b/libavformat/avio.c > > @@ -123,8 +123,8 @@ static int url_alloc_for_protocol(URLContext **puc, const URLProtocol *up, > > int err; > > > > #if CONFIG_NETWORK > > - if (up->flags & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init()) > > - return AVERROR(EIO); > > + if (up->flags & URL_PROTOCOL_FLAG_NETWORK && (err=ff_network_init())<0) > > + return err; > > #endif > > if ((flags & AVIO_FLAG_READ) && !up->url_read) { > > av_log(NULL, AV_LOG_ERROR, > > diff --git a/libavformat/network.c b/libavformat/network.c > > index f295957aa5..c1b0e69362 100644 > > --- a/libavformat/network.c > > +++ b/libavformat/network.c > > @@ -59,11 +59,10 @@ int ff_network_init(void) > > { > > #if HAVE_WINSOCK2_H > > WSADATA wsaData; > > - > > - if (WSAStartup(MAKEWORD(1,1), &wsaData)) > > - return 0; > > + return ff_neterrno2(WSAStartup(MAKEWORD(1,1), &wsaData)); > > +#else > > + return 0; > > #endif > > - return 1; > > } > > > > int ff_network_wait_fd(int fd, int write) > > diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c > > index b0c61ee00a..3db4ed11c2 100644 > > --- a/libavformat/rtsp.c > > +++ b/libavformat/rtsp.c > > @@ -1740,8 +1740,8 @@ int ff_rtsp_connect(AVFormatContext *s) > > return AVERROR(EINVAL); > > } > > > > - if (!ff_network_init()) > > - return AVERROR(EIO); > > + if ((err = ff_network_init())<0) > > + return err; > > Assignments in if conditions should be avoided. So this should be expanded > to: > > err = ff_network_init(); > if (err < 0) > return err; > > Same for the rest of the checks later. > > Thanks, > Marton Assignments in if conditions seem to be the standard in that file, so I figured it was better to have one ugly standard than two competing ones. But I agree they're not good, so I'll propose a new patch in a few days if nobody objects. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v4 3/3] avformat/avformat: Document return codes for av_format_(de)init 2024-04-20 13:24 ` [FFmpeg-devel] [PATCH v4 " Andrew Sayers 2024-04-20 13:25 ` [FFmpeg-devel] [PATCH v4 2/3] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers @ 2024-04-20 13:25 ` Andrew Sayers 2024-04-27 8:46 ` [FFmpeg-devel] [PATCH v4 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Andrew Sayers 2 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-20 13:25 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avformat.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 8afdcd9fd0..f624fb1e2e 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1944,12 +1944,16 @@ const char *avformat_license(void); * This function will be deprecated once support for older GnuTLS and * OpenSSL libraries is removed, and this function has no purpose * anymore. + * + * @return 0 for success or AVERROR code */ int avformat_network_init(void); /** * Undo the initialization done by avformat_network_init. Call it only * once for each time you called avformat_network_init. + * + * @return 0 for success or AVERROR code */ int avformat_network_deinit(void); -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v4 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno 2024-04-20 13:24 ` [FFmpeg-devel] [PATCH v4 " Andrew Sayers 2024-04-20 13:25 ` [FFmpeg-devel] [PATCH v4 2/3] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers 2024-04-20 13:25 ` [FFmpeg-devel] [PATCH v4 3/3] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers @ 2024-04-27 8:46 ` Andrew Sayers 2 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-04-27 8:46 UTC (permalink / raw) To: ffmpeg-devel On Sat, Apr 20, 2024 at 02:24:59PM +0100, Andrew Sayers wrote: > For example, WSAStartup()'s documentation says: > > "A call to the WSAGetLastError function is not needed and should not be used" > --- > libavformat/network.c | 5 ++++- > libavformat/network.h | 2 ++ > 2 files changed, 6 insertions(+), 1 deletion(-) > > diff --git a/libavformat/network.c b/libavformat/network.c > index f752efc411..f295957aa5 100644 > --- a/libavformat/network.c > +++ b/libavformat/network.c > @@ -123,7 +123,10 @@ void ff_network_close(void) > #if HAVE_WINSOCK2_H > int ff_neterrno(void) > { > - int err = WSAGetLastError(); > + return ff_neterrno2(WSAGetLastError()); > +} > +int ff_neterrno2(int err) > +{ > switch (err) { > case WSAEWOULDBLOCK: > return AVERROR(EAGAIN); > diff --git a/libavformat/network.h b/libavformat/network.h > index ca214087fc..84348f52a4 100644 > --- a/libavformat/network.h > +++ b/libavformat/network.h > @@ -58,6 +58,7 @@ > #define setsockopt(a, b, c, d, e) setsockopt(a, b, c, (const char*) d, e) > > int ff_neterrno(void); > +int ff_neterrno2(int err); > #else > #include <sys/types.h> > #include <sys/socket.h> > @@ -66,6 +67,7 @@ int ff_neterrno(void); > #include <netdb.h> > > #define ff_neterrno() AVERROR(errno) > +#define ff_neterrno2(ERRNO) AVERROR(ERRNO) > #endif /* HAVE_WINSOCK2_H */ > > #if HAVE_ARPA_INET_H Ping? Still applies, and I'm not aware of any further changes needed. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno 2024-04-19 19:07 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Andrew Sayers ` (2 preceding siblings ...) 2024-04-20 7:57 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Stefano Sabatini @ 2024-05-05 19:59 ` Marton Balint 2024-05-07 13:41 ` Andrew Sayers 3 siblings, 1 reply; 34+ messages in thread From: Marton Balint @ 2024-05-05 19:59 UTC (permalink / raw) To: FFmpeg development discussions and patches On Fri, 19 Apr 2024, Andrew Sayers wrote: > For example, WSAStartup()'s documentation says: > > "A call to the WSAGetLastError function is not needed and should not be used" > --- > libavformat/network.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/libavformat/network.c b/libavformat/network.c > index f752efc411..fb70f9cafc 100644 > --- a/libavformat/network.c > +++ b/libavformat/network.c > @@ -121,9 +121,14 @@ void ff_network_close(void) > } > > #if HAVE_WINSOCK2_H > + > +} > int ff_neterrno(void) > { > - int err = WSAGetLastError(); > + return ff_neterrno2(WSAGetLastError()); > +} > +int ff_neterrno2(int err) ff_neterror(int err) would be a better name, since it has nothing to do with errno. Regards. Marton > +{ > switch (err) { > case WSAEWOULDBLOCK: > return AVERROR(EAGAIN); > -- > 2.43.0 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno 2024-05-05 19:59 ` [FFmpeg-devel] [PATCH v3 " Marton Balint @ 2024-05-07 13:41 ` Andrew Sayers 2024-05-07 21:05 ` Marton Balint 0 siblings, 1 reply; 34+ messages in thread From: Andrew Sayers @ 2024-05-07 13:41 UTC (permalink / raw) To: FFmpeg development discussions and patches On Sun, May 05, 2024 at 09:59:28PM +0200, Marton Balint wrote: > > > On Fri, 19 Apr 2024, Andrew Sayers wrote: > > > For example, WSAStartup()'s documentation says: > > > > "A call to the WSAGetLastError function is not needed and should not be used" > > --- > > libavformat/network.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/libavformat/network.c b/libavformat/network.c > > index f752efc411..fb70f9cafc 100644 > > --- a/libavformat/network.c > > +++ b/libavformat/network.c > > @@ -121,9 +121,14 @@ void ff_network_close(void) > > } > > > > #if HAVE_WINSOCK2_H > > + > > +} > > int ff_neterrno(void) > > { > > - int err = WSAGetLastError(); > > + return ff_neterrno2(WSAGetLastError()); > > +} > > +int ff_neterrno2(int err) > > ff_neterror(int err) would be a better name, since it has nothing to do with > errno. > > Regards. > Marton Not sure which one you're proposing to rename, but if the original ff_neterrno() was documented, I think it would say something like: /* * @brief AVERROR for the latest network function * @return AVERROR based on `WSAGetLastError()` (Windows) or `errno` (otherwise) */ ... and neterrno2 would be something like: /* * @brief ff_neterrno()-style AVERROR * @param err error code (usually an errno or Windows Sockets Error Code) * @return AVERROR equivalent to err */ So neither necessarily have anything to do with errno. How about adding the above documentation then doing s/ff_neterrno(2?)/ff_neterror\1/g ? Note: this was supposed to be a quick patch documenting the existing behaviour of a single function, and has now scope-crept up to a fairly sizeable refactor of a barely-related function. I don't mind working on this sort of thing in principle, but would like to land this particular patch before things get too much further out of hand. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno 2024-05-07 13:41 ` Andrew Sayers @ 2024-05-07 21:05 ` Marton Balint 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 0/5] avformat/network: improve ff_neterrno() Andrew Sayers 0 siblings, 1 reply; 34+ messages in thread From: Marton Balint @ 2024-05-07 21:05 UTC (permalink / raw) To: FFmpeg development discussions and patches On Tue, 7 May 2024, Andrew Sayers wrote: > On Sun, May 05, 2024 at 09:59:28PM +0200, Marton Balint wrote: >> >> >> On Fri, 19 Apr 2024, Andrew Sayers wrote: >> >>> For example, WSAStartup()'s documentation says: >>> >>> "A call to the WSAGetLastError function is not needed and should not be used" >>> --- >>> libavformat/network.c | 7 ++++++- >>> 1 file changed, 6 insertions(+), 1 deletion(-) >>> >>> diff --git a/libavformat/network.c b/libavformat/network.c >>> index f752efc411..fb70f9cafc 100644 >>> --- a/libavformat/network.c >>> +++ b/libavformat/network.c >>> @@ -121,9 +121,14 @@ void ff_network_close(void) >>> } >>> >>> #if HAVE_WINSOCK2_H >>> + >>> +} >>> int ff_neterrno(void) >>> { >>> - int err = WSAGetLastError(); >>> + return ff_neterrno2(WSAGetLastError()); >>> +} >>> +int ff_neterrno2(int err) >> >> ff_neterror(int err) would be a better name, since it has nothing to do with >> errno. >> >> Regards. >> Marton > > Not sure which one you're proposing to rename, > but if the original > ff_neterrno() was documented, I think it would say something like: > > /* > * @brief AVERROR for the latest network function > * @return AVERROR based on `WSAGetLastError()` (Windows) or `errno` (otherwise) > */ > > ... and neterrno2 would be something like: > > /* > * @brief ff_neterrno()-style AVERROR > * @param err error code (usually an errno or Windows Sockets Error Code) > * @return AVERROR equivalent to err > */ > > So neither necessarily have anything to do with errno. How about adding the > above documentation then doing s/ff_neterrno(2?)/ff_neterror\1/g ? Okay, indeed that makes the most sense. Since the function renames will affect a lot of existing files, it should be a separate patch with no functional changes. Thanks, Marton > > Note: this was supposed to be a quick patch documenting the existing behaviour > of a single function, and has now scope-crept up to a fairly sizeable refactor > of a barely-related function. I don't mind working on this sort of thing in > principle, but would like to land this particular patch before things get too > much further out of hand. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v4 0/5] avformat/network: improve ff_neterrno() 2024-05-07 21:05 ` Marton Balint @ 2024-05-16 9:33 ` Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 1/5] Add documentation for ff_neterrno() Andrew Sayers ` (4 more replies) 0 siblings, 5 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 9:33 UTC (permalink / raw) To: ffmpeg-devel I've prepended two patches - one with just the documentation, the other with just the code. The latter was generated automatically with the command specified in the commit message, so e.g. rebase conflicts can be resolved by throwing away the old commit and rerunning the command. As discussed, this also fixes the assigns in if-statements. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v4 1/5] Add documentation for ff_neterrno() 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 0/5] avformat/network: improve ff_neterrno() Andrew Sayers @ 2024-05-16 9:33 ` Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 2/5] Rename "ff_neterrno()" to "ff_neterror()" Andrew Sayers ` (3 subsequent siblings) 4 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 9:33 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/network.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libavformat/network.h b/libavformat/network.h index ca214087fc..728c20c9bb 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -57,6 +57,11 @@ #define getsockopt(a, b, c, d, e) getsockopt(a, b, c, (char*) d, e) #define setsockopt(a, b, c, d, e) setsockopt(a, b, c, (const char*) d, e) +/* + * @brief AVERROR for the latest network function + * @return platform-specific AVERROR value + * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) + */ int ff_neterrno(void); #else #include <sys/types.h> @@ -65,6 +70,11 @@ int ff_neterrno(void); #include <netinet/tcp.h> #include <netdb.h> +/* + * @brief AVERROR for the latest network function + * @return platform-specific AVERROR value + * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) + */ #define ff_neterrno() AVERROR(errno) #endif /* HAVE_WINSOCK2_H */ -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v4 2/5] Rename "ff_neterrno()" to "ff_neterror()" 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 0/5] avformat/network: improve ff_neterrno() Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 1/5] Add documentation for ff_neterrno() Andrew Sayers @ 2024-05-16 9:33 ` Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 3/5] avformat/network: add ff_neterror2() for cases where we already have an error Andrew Sayers ` (2 subsequent siblings) 4 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 9:33 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers This function does not check errno on Windows, so the old name was misleading. Actual command: sed -i -e 's/ff_neterrno/ff_neterror/g' $( git grep -l ff_neterrno ) --- libavformat/network.c | 24 ++++++++++++------------ libavformat/network.h | 4 ++-- libavformat/rtpproto.c | 8 ++++---- libavformat/sctp.c | 10 +++++----- libavformat/tcp.c | 8 ++++---- libavformat/udp.c | 32 ++++++++++++++++---------------- libavformat/unix.c | 6 +++--- libavformat/url.h | 2 +- 8 files changed, 47 insertions(+), 47 deletions(-) diff --git a/libavformat/network.c b/libavformat/network.c index f752efc411..5d0d05c5f1 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -72,7 +72,7 @@ int ff_network_wait_fd(int fd, int write) struct pollfd p = { .fd = fd, .events = ev, .revents = 0 }; int ret; ret = poll(&p, 1, POLLING_TIME); - return ret < 0 ? ff_neterrno() : p.revents & (ev | POLLERR | POLLHUP) ? 0 : AVERROR(EAGAIN); + return ret < 0 ? ff_neterror() : p.revents & (ev | POLLERR | POLLHUP) ? 0 : AVERROR(EAGAIN); } int ff_network_wait_fd_timeout(int fd, int write, int64_t timeout, AVIOInterruptCB *int_cb) @@ -121,7 +121,7 @@ void ff_network_close(void) } #if HAVE_WINSOCK2_H -int ff_neterrno(void) +int ff_neterror(void) { int err = WSAGetLastError(); switch (err) { @@ -168,7 +168,7 @@ static int ff_poll_interrupt(struct pollfd *p, nfds_t nfds, int timeout, ret = poll(p, nfds, POLLING_TIME); if (ret != 0) { if (ret < 0) - ret = ff_neterrno(); + ret = ff_neterror(); if (ret == AVERROR(EINTR)) continue; break; @@ -217,11 +217,11 @@ int ff_listen(int fd, const struct sockaddr *addr, } ret = bind(fd, addr, addrlen); if (ret) - return ff_neterrno(); + return ff_neterror(); ret = listen(fd, 1); if (ret) - return ff_neterrno(); + return ff_neterror(); return ret; } @@ -236,7 +236,7 @@ int ff_accept(int fd, int timeout, URLContext *h) ret = accept(fd, NULL, NULL); if (ret < 0) - return ff_neterrno(); + return ff_neterror(); if (ff_socket_nonblock(ret, 1) < 0) av_log(h, AV_LOG_DEBUG, "ff_socket_nonblock failed\n"); @@ -267,7 +267,7 @@ int ff_listen_connect(int fd, const struct sockaddr *addr, av_log(h, AV_LOG_DEBUG, "ff_socket_nonblock failed\n"); while ((ret = connect(fd, addr, addrlen))) { - ret = ff_neterrno(); + ret = ff_neterror(); switch (ret) { case AVERROR(EINTR): if (ff_check_interrupt(&h->interrupt_callback)) @@ -280,7 +280,7 @@ int ff_listen_connect(int fd, const struct sockaddr *addr, return ret; optlen = sizeof(ret); if (getsockopt (fd, SOL_SOCKET, SO_ERROR, &ret, &optlen)) - ret = AVUNERROR(ff_neterrno()); + ret = AVUNERROR(ff_neterror()); if (ret != 0) { char errbuf[100]; ret = AVERROR(ret); @@ -365,7 +365,7 @@ static int start_connect_attempt(struct ConnectionAttempt *attempt, attempt->fd = ff_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol, h); if (attempt->fd < 0) - return ff_neterrno(); + return ff_neterror(); attempt->deadline_us = av_gettime_relative() + timeout_ms * 1000; attempt->addr = ai; @@ -381,7 +381,7 @@ static int start_connect_attempt(struct ConnectionAttempt *attempt, } while ((ret = connect(attempt->fd, ai->ai_addr, ai->ai_addrlen))) { - ret = ff_neterrno(); + ret = ff_neterror(); switch (ret) { case AVERROR(EINTR): if (ff_check_interrupt(&h->interrupt_callback)) { @@ -478,7 +478,7 @@ int ff_connect_parallel(struct addrinfo *addrs, int timeout_ms_per_address, // a successful connection or an error). optlen = sizeof(last_err); if (getsockopt(attempts[i].fd, SOL_SOCKET, SO_ERROR, &last_err, &optlen)) - last_err = ff_neterrno(); + last_err = ff_neterror(); else if (last_err != 0) last_err = AVERROR(last_err); if (last_err == 0) { @@ -587,6 +587,6 @@ int ff_http_match_no_proxy(const char *no_proxy, const char *hostname) void ff_log_net_error(void *ctx, int level, const char* prefix) { char errbuf[100]; - av_strerror(ff_neterrno(), errbuf, sizeof(errbuf)); + av_strerror(ff_neterror(), errbuf, sizeof(errbuf)); av_log(ctx, level, "%s: %s\n", prefix, errbuf); } diff --git a/libavformat/network.h b/libavformat/network.h index 728c20c9bb..f338694212 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -62,7 +62,7 @@ * @return platform-specific AVERROR value * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) */ -int ff_neterrno(void); +int ff_neterror(void); #else #include <sys/types.h> #include <sys/socket.h> @@ -75,7 +75,7 @@ int ff_neterrno(void); * @return platform-specific AVERROR value * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) */ -#define ff_neterrno() AVERROR(errno) +#define ff_neterror() AVERROR(errno) #endif /* HAVE_WINSOCK2_H */ #if HAVE_ARPA_INET_H diff --git a/libavformat/rtpproto.c b/libavformat/rtpproto.c index b1cdf061f0..e8963307f3 100644 --- a/libavformat/rtpproto.c +++ b/libavformat/rtpproto.c @@ -410,8 +410,8 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) len = recvfrom(p[i].fd, buf, size, 0, (struct sockaddr *)addrs[i], addr_lens[i]); if (len < 0) { - if (ff_neterrno() == AVERROR(EAGAIN) || - ff_neterrno() == AVERROR(EINTR)) + if (ff_neterror() == AVERROR(EAGAIN) || + ff_neterror() == AVERROR(EINTR)) continue; return AVERROR(EIO); } @@ -422,7 +422,7 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) } else if (n == 0 && h->rw_timeout > 0 && --runs <= 0) { return AVERROR(ETIMEDOUT); } else if (n < 0) { - if (ff_neterrno() == AVERROR(EINTR)) + if (ff_neterror() == AVERROR(EINTR)) continue; return AVERROR(EIO); } @@ -492,7 +492,7 @@ static int rtp_write(URLContext *h, const uint8_t *buf, int size) ret = sendto(fd, buf, size, 0, (struct sockaddr *) source, *source_len); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } if (RTP_PT_IS_RTCP(buf[1])) { diff --git a/libavformat/sctp.c b/libavformat/sctp.c index 9d9e90097e..7170a716e7 100644 --- a/libavformat/sctp.c +++ b/libavformat/sctp.c @@ -222,7 +222,7 @@ static int sctp_open(URLContext *h, const char *uri, int flags) restart: fd = ff_socket(cur_ai->ai_family, SOCK_STREAM, IPPROTO_SCTP, h); if (fd < 0) { - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } @@ -261,7 +261,7 @@ restart: av_log(h, AV_LOG_ERROR, "SCTP ERROR: Unable to initialize socket max streams %d\n", s->max_streams); - ret = ff_neterrno(); + ret = ff_neterror(); goto fail1; } } @@ -296,7 +296,7 @@ static int sctp_wait_fd(int fd, int write) int ret; ret = poll(&p, 1, 100); - return ret < 0 ? ff_neterrno() : p.revents & ev ? 0 : AVERROR(EAGAIN); + return ret < 0 ? ff_neterror() : p.revents & ev ? 0 : AVERROR(EAGAIN); } static int sctp_read(URLContext *h, uint8_t *buf, int size) @@ -319,7 +319,7 @@ static int sctp_read(URLContext *h, uint8_t *buf, int size) } else ret = recv(s->fd, buf, size, 0); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int sctp_write(URLContext *h, const uint8_t *buf, int size) @@ -345,7 +345,7 @@ static int sctp_write(URLContext *h, const uint8_t *buf, int size) } else ret = send(s->fd, buf, size, MSG_NOSIGNAL); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int sctp_close(URLContext *h) diff --git a/libavformat/tcp.c b/libavformat/tcp.c index 755e3af242..2c12ee78ad 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -226,7 +226,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags) cur_ai->ai_socktype, cur_ai->ai_protocol, h); if (fd < 0) { - ret = ff_neterrno(); + ret = ff_neterror(); cur_ai = cur_ai->ai_next; } } @@ -296,7 +296,7 @@ static int tcp_read(URLContext *h, uint8_t *buf, int size) ret = recv(s->fd, buf, size, 0); if (ret == 0) return AVERROR_EOF; - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int tcp_write(URLContext *h, const uint8_t *buf, int size) @@ -310,7 +310,7 @@ static int tcp_write(URLContext *h, const uint8_t *buf, int size) return ret; } ret = send(s->fd, buf, size, MSG_NOSIGNAL); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int tcp_shutdown(URLContext *h, int flags) @@ -357,7 +357,7 @@ static int tcp_get_window_size(URLContext *h) #endif if (getsockopt(s->fd, SOL_SOCKET, SO_RCVBUF, &avail, &avail_len)) { - return ff_neterrno(); + return ff_neterror(); } return avail; } diff --git a/libavformat/udp.c b/libavformat/udp.c index c1ebdd1222..aca3ed9ceb 100644 --- a/libavformat/udp.c +++ b/libavformat/udp.c @@ -190,7 +190,7 @@ static int udp_set_multicast_ttl(int sockfd, int mcastTTL, ff_log_net_error(logctx, AV_LOG_DEBUG, "setsockopt(IPV4/IPV6 MULTICAST TTL)"); if (setsockopt(sockfd, protocol, cmd, &ttl, sizeof(ttl)) < 0) { ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt(IPV4/IPV6 MULTICAST TTL)"); - return ff_neterrno(); + return ff_neterror(); } } @@ -211,7 +211,7 @@ static int udp_join_multicast_group(int sockfd, struct sockaddr *addr, mreq.imr_interface.s_addr = INADDR_ANY; if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const void *)&mreq, sizeof(mreq)) < 0) { ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt(IP_ADD_MEMBERSHIP)"); - return ff_neterrno(); + return ff_neterror(); } } #endif @@ -224,7 +224,7 @@ static int udp_join_multicast_group(int sockfd, struct sockaddr *addr, mreq6.ipv6mr_interface = 0; if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &mreq6, sizeof(mreq6)) < 0) { ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt(IPV6_ADD_MEMBERSHIP)"); - return ff_neterrno(); + return ff_neterror(); } } #endif @@ -294,7 +294,7 @@ static int udp_set_multicast_sources(URLContext *h, ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(MCAST_JOIN_SOURCE_GROUP)"); else ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(MCAST_BLOCK_SOURCE)"); - return ff_neterrno(); + return ff_neterror(); } } return 0; @@ -326,7 +326,7 @@ static int udp_set_multicast_sources(URLContext *h, ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(IP_ADD_SOURCE_MEMBERSHIP)"); else ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(IP_BLOCK_SOURCE)"); - return ff_neterrno(); + return ff_neterror(); } } #else @@ -508,8 +508,8 @@ static void *circular_buffer_task_rx( void *_URLContext) pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_cancelstate); pthread_mutex_lock(&s->mutex); if (len < 0) { - if (ff_neterrno() != AVERROR(EAGAIN) && ff_neterrno() != AVERROR(EINTR)) { - s->circular_buffer_error = ff_neterrno(); + if (ff_neterror() != AVERROR(EAGAIN) && ff_neterror() != AVERROR(EINTR)) { + s->circular_buffer_error = ff_neterror(); goto end; } continue; @@ -621,7 +621,7 @@ static void *circular_buffer_task_tx( void *_URLContext) len -= ret; p += ret; } else { - ret = ff_neterrno(); + ret = ff_neterror(); if (ret != AVERROR(EAGAIN) && ret != AVERROR(EINTR)) { pthread_mutex_lock(&s->mutex); s->circular_buffer_error = ret; @@ -797,7 +797,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) if (s->reuse_socket > 0 || (s->is_multicast && s->reuse_socket < 0)) { s->reuse_socket = 1; if (setsockopt (udp_fd, SOL_SOCKET, SO_REUSEADDR, &(s->reuse_socket), sizeof(s->reuse_socket)) != 0) { - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } } @@ -805,7 +805,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) if (s->is_broadcast) { #ifdef SO_BROADCAST if (setsockopt (udp_fd, SOL_SOCKET, SO_BROADCAST, &(s->is_broadcast), sizeof(s->is_broadcast)) != 0) { - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } #else @@ -829,7 +829,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) if (dscp >= 0) { dscp <<= 2; if (setsockopt (udp_fd, IPPROTO_IP, IP_TOS, &dscp, sizeof(dscp)) != 0) { - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } } @@ -846,7 +846,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) /* the bind is needed to give a port to the socket now */ if (bind_ret < 0 && bind(udp_fd,(struct sockaddr *)&my_addr, len) < 0) { ff_log_net_error(h, AV_LOG_ERROR, "bind failed"); - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } @@ -890,7 +890,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) tmp = s->buffer_size; if (setsockopt(udp_fd, SOL_SOCKET, SO_SNDBUF, &tmp, sizeof(tmp)) < 0) { ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(SO_SNDBUF)"); - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } } else { @@ -914,7 +914,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) if (s->is_connected) { if (connect(udp_fd, (struct sockaddr *) &s->dest_addr, s->dest_addr_len)) { ff_log_net_error(h, AV_LOG_ERROR, "connect"); - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } } @@ -1045,7 +1045,7 @@ static int udp_read(URLContext *h, uint8_t *buf, int size) } ret = recvfrom(s->udp_fd, buf, size, 0, (struct sockaddr *)&addr, &addr_len); if (ret < 0) - return ff_neterrno(); + return ff_neterror(); if (ff_ip_check_source_lists(&addr, &s->filters)) return AVERROR(EINTR); return ret; @@ -1098,7 +1098,7 @@ static int udp_write(URLContext *h, const uint8_t *buf, int size) } else ret = send(s->udp_fd, buf, size, 0); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int udp_close(URLContext *h) diff --git a/libavformat/unix.c b/libavformat/unix.c index 5704155cf0..d1b4e6a5ca 100644 --- a/libavformat/unix.c +++ b/libavformat/unix.c @@ -70,7 +70,7 @@ static int unix_open(URLContext *h, const char *filename, int flags) av_strlcpy(s->addr.sun_path, filename, sizeof(s->addr.sun_path)); if ((fd = ff_socket(AF_UNIX, s->type, 0, h)) < 0) - return ff_neterrno(); + return ff_neterror(); if (s->timeout < 0 && h->rw_timeout) s->timeout = h->rw_timeout / 1000; @@ -113,7 +113,7 @@ static int unix_read(URLContext *h, uint8_t *buf, int size) ret = recv(s->fd, buf, size, 0); if (!ret && s->type == SOCK_STREAM) return AVERROR_EOF; - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int unix_write(URLContext *h, const uint8_t *buf, int size) @@ -127,7 +127,7 @@ static int unix_write(URLContext *h, const uint8_t *buf, int size) return ret; } ret = send(s->fd, buf, size, MSG_NOSIGNAL); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int unix_close(URLContext *h) diff --git a/libavformat/url.h b/libavformat/url.h index 0784d77b64..a6b48d06d9 100644 --- a/libavformat/url.h +++ b/libavformat/url.h @@ -150,7 +150,7 @@ int ffurl_open_whitelist(URLContext **puc, const char *filename, int flags, * * @param s server context * @param c client context, must be unallocated. - * @return >= 0 on success, ff_neterrno() on failure. + * @return >= 0 on success, ff_neterror() on failure. */ int ffurl_accept(URLContext *s, URLContext **c); -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v4 3/5] avformat/network: add ff_neterror2() for cases where we already have an error 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 0/5] avformat/network: improve ff_neterrno() Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 1/5] Add documentation for ff_neterrno() Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 2/5] Rename "ff_neterrno()" to "ff_neterror()" Andrew Sayers @ 2024-05-16 9:33 ` Andrew Sayers 2024-05-16 10:42 ` Rémi Denis-Courmont 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 4/5] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 5/5] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 4 siblings, 1 reply; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 9:33 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers For example, WSAStartup()'s documentation says: "A call to the WSAGetLastError function is not needed and should not be used" --- libavformat/network.c | 5 ++++- libavformat/network.h | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/libavformat/network.c b/libavformat/network.c index 5d0d05c5f1..351dc34bb6 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -123,7 +123,10 @@ void ff_network_close(void) #if HAVE_WINSOCK2_H int ff_neterror(void) { - int err = WSAGetLastError(); + return ff_neterror2(WSAGetLastError()); +} +int ff_neterror2(int err) +{ switch (err) { case WSAEWOULDBLOCK: return AVERROR(EAGAIN); diff --git a/libavformat/network.h b/libavformat/network.h index f338694212..7c8f81a050 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -63,6 +63,12 @@ * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) */ int ff_neterror(void); +/* + * @brief ff_neterror()-style AVERROR + * @param err error code (usually an errno or Windows Sockets Error Code) + * @note Windows Sockets Error Codes are only supported in Windows + */ +int ff_neterror2(int err); #else #include <sys/types.h> #include <sys/socket.h> @@ -76,6 +82,12 @@ int ff_neterror(void); * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) */ #define ff_neterror() AVERROR(errno) +/* + * @brief ff_neterror()-style AVERROR + * @param err error code (usually an errno or Windows Sockets Error Code) + * @note Windows Sockets Error Codes are only supported in Windows + */ +#define ff_neterror2(ERRNO) AVERROR(ERRNO) #endif /* HAVE_WINSOCK2_H */ #if HAVE_ARPA_INET_H -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v4 3/5] avformat/network: add ff_neterror2() for cases where we already have an error 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 3/5] avformat/network: add ff_neterror2() for cases where we already have an error Andrew Sayers @ 2024-05-16 10:42 ` Rémi Denis-Courmont 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers 0 siblings, 1 reply; 34+ messages in thread From: Rémi Denis-Courmont @ 2024-05-16 10:42 UTC (permalink / raw) To: FFmpeg development discussions and patches Le 16 mai 2024 12:33:36 GMT+03:00, Andrew Sayers <ffmpeg-devel@pileofstuff.org> a écrit : >For example, WSAStartup()'s documentation says: > > "A call to the WSAGetLastError function is not needed and should not be used" >--- > libavformat/network.c | 5 ++++- > libavformat/network.h | 12 ++++++++++++ > 2 files changed, 16 insertions(+), 1 deletion(-) > >diff --git a/libavformat/network.c b/libavformat/network.c >index 5d0d05c5f1..351dc34bb6 100644 >--- a/libavformat/network.c >+++ b/libavformat/network.c >@@ -123,7 +123,10 @@ void ff_network_close(void) > #if HAVE_WINSOCK2_H > int ff_neterror(void) > { >- int err = WSAGetLastError(); >+ return ff_neterror2(WSAGetLastError()); >+} >+int ff_neterror2(int err) Err, please. Keep this to the Windows back-end. Nothing good is going to happen with a function that does nothing (on other platforms) and has a nondescript numbered name. >+{ > switch (err) { > case WSAEWOULDBLOCK: > return AVERROR(EAGAIN); >diff --git a/libavformat/network.h b/libavformat/network.h >index f338694212..7c8f81a050 100644 >--- a/libavformat/network.h >+++ b/libavformat/network.h >@@ -63,6 +63,12 @@ > * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) > */ > int ff_neterror(void); >+/* >+ * @brief ff_neterror()-style AVERROR >+ * @param err error code (usually an errno or Windows Sockets Error Code) >+ * @note Windows Sockets Error Codes are only supported in Windows >+ */ >+int ff_neterror2(int err); > #else > #include <sys/types.h> > #include <sys/socket.h> >@@ -76,6 +82,12 @@ int ff_neterror(void); > * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) > */ > #define ff_neterror() AVERROR(errno) >+/* >+ * @brief ff_neterror()-style AVERROR >+ * @param err error code (usually an errno or Windows Sockets Error Code) >+ * @note Windows Sockets Error Codes are only supported in Windows >+ */ >+#define ff_neterror2(ERRNO) AVERROR(ERRNO) > #endif /* HAVE_WINSOCK2_H */ > > #if HAVE_ARPA_INET_H _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() 2024-05-16 10:42 ` Rémi Denis-Courmont @ 2024-05-16 11:59 ` Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 1/6] Add documentation for ff_neterrno() Andrew Sayers ` (6 more replies) 0 siblings, 7 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 11:59 UTC (permalink / raw) To: ffmpeg-devel On Thu, May 16, 2024 at 01:42:23PM +0300, Rémi Denis-Courmont wrote: > Err, please. Keep this to the Windows back-end. Nothing good is going to happen with a function that does nothing (on other platforms) and has a nondescript numbered name. I have no strong opinion either way, and it feels rather bikesheddable. Here's a version with the offending part moved to its own patch - I'm happy for whoever applies this to decide whether they want to keep or chuck patch 4/6 :) _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v5 1/6] Add documentation for ff_neterrno() 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers @ 2024-05-16 11:59 ` Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 2/6] Rename "ff_neterrno()" to "ff_neterror()" Andrew Sayers ` (5 subsequent siblings) 6 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 11:59 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/network.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libavformat/network.h b/libavformat/network.h index ca214087fc..728c20c9bb 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -57,6 +57,11 @@ #define getsockopt(a, b, c, d, e) getsockopt(a, b, c, (char*) d, e) #define setsockopt(a, b, c, d, e) setsockopt(a, b, c, (const char*) d, e) +/* + * @brief AVERROR for the latest network function + * @return platform-specific AVERROR value + * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) + */ int ff_neterrno(void); #else #include <sys/types.h> @@ -65,6 +70,11 @@ int ff_neterrno(void); #include <netinet/tcp.h> #include <netdb.h> +/* + * @brief AVERROR for the latest network function + * @return platform-specific AVERROR value + * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) + */ #define ff_neterrno() AVERROR(errno) #endif /* HAVE_WINSOCK2_H */ -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v5 2/6] Rename "ff_neterrno()" to "ff_neterror()" 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 1/6] Add documentation for ff_neterrno() Andrew Sayers @ 2024-05-16 11:59 ` Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 3/6] avformat/network: add ff_neterror2() for cases that don't use WSAGetLastError Andrew Sayers ` (4 subsequent siblings) 6 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 11:59 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers This function does not check errno on Windows, so the old name was misleading. Actual command: sed -i -e 's/ff_neterrno/ff_neterror/g' $( git grep -l ff_neterrno ) --- libavformat/network.c | 24 ++++++++++++------------ libavformat/network.h | 4 ++-- libavformat/rtpproto.c | 8 ++++---- libavformat/sctp.c | 10 +++++----- libavformat/tcp.c | 8 ++++---- libavformat/udp.c | 32 ++++++++++++++++---------------- libavformat/unix.c | 6 +++--- libavformat/url.h | 2 +- 8 files changed, 47 insertions(+), 47 deletions(-) diff --git a/libavformat/network.c b/libavformat/network.c index f752efc411..5d0d05c5f1 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -72,7 +72,7 @@ int ff_network_wait_fd(int fd, int write) struct pollfd p = { .fd = fd, .events = ev, .revents = 0 }; int ret; ret = poll(&p, 1, POLLING_TIME); - return ret < 0 ? ff_neterrno() : p.revents & (ev | POLLERR | POLLHUP) ? 0 : AVERROR(EAGAIN); + return ret < 0 ? ff_neterror() : p.revents & (ev | POLLERR | POLLHUP) ? 0 : AVERROR(EAGAIN); } int ff_network_wait_fd_timeout(int fd, int write, int64_t timeout, AVIOInterruptCB *int_cb) @@ -121,7 +121,7 @@ void ff_network_close(void) } #if HAVE_WINSOCK2_H -int ff_neterrno(void) +int ff_neterror(void) { int err = WSAGetLastError(); switch (err) { @@ -168,7 +168,7 @@ static int ff_poll_interrupt(struct pollfd *p, nfds_t nfds, int timeout, ret = poll(p, nfds, POLLING_TIME); if (ret != 0) { if (ret < 0) - ret = ff_neterrno(); + ret = ff_neterror(); if (ret == AVERROR(EINTR)) continue; break; @@ -217,11 +217,11 @@ int ff_listen(int fd, const struct sockaddr *addr, } ret = bind(fd, addr, addrlen); if (ret) - return ff_neterrno(); + return ff_neterror(); ret = listen(fd, 1); if (ret) - return ff_neterrno(); + return ff_neterror(); return ret; } @@ -236,7 +236,7 @@ int ff_accept(int fd, int timeout, URLContext *h) ret = accept(fd, NULL, NULL); if (ret < 0) - return ff_neterrno(); + return ff_neterror(); if (ff_socket_nonblock(ret, 1) < 0) av_log(h, AV_LOG_DEBUG, "ff_socket_nonblock failed\n"); @@ -267,7 +267,7 @@ int ff_listen_connect(int fd, const struct sockaddr *addr, av_log(h, AV_LOG_DEBUG, "ff_socket_nonblock failed\n"); while ((ret = connect(fd, addr, addrlen))) { - ret = ff_neterrno(); + ret = ff_neterror(); switch (ret) { case AVERROR(EINTR): if (ff_check_interrupt(&h->interrupt_callback)) @@ -280,7 +280,7 @@ int ff_listen_connect(int fd, const struct sockaddr *addr, return ret; optlen = sizeof(ret); if (getsockopt (fd, SOL_SOCKET, SO_ERROR, &ret, &optlen)) - ret = AVUNERROR(ff_neterrno()); + ret = AVUNERROR(ff_neterror()); if (ret != 0) { char errbuf[100]; ret = AVERROR(ret); @@ -365,7 +365,7 @@ static int start_connect_attempt(struct ConnectionAttempt *attempt, attempt->fd = ff_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol, h); if (attempt->fd < 0) - return ff_neterrno(); + return ff_neterror(); attempt->deadline_us = av_gettime_relative() + timeout_ms * 1000; attempt->addr = ai; @@ -381,7 +381,7 @@ static int start_connect_attempt(struct ConnectionAttempt *attempt, } while ((ret = connect(attempt->fd, ai->ai_addr, ai->ai_addrlen))) { - ret = ff_neterrno(); + ret = ff_neterror(); switch (ret) { case AVERROR(EINTR): if (ff_check_interrupt(&h->interrupt_callback)) { @@ -478,7 +478,7 @@ int ff_connect_parallel(struct addrinfo *addrs, int timeout_ms_per_address, // a successful connection or an error). optlen = sizeof(last_err); if (getsockopt(attempts[i].fd, SOL_SOCKET, SO_ERROR, &last_err, &optlen)) - last_err = ff_neterrno(); + last_err = ff_neterror(); else if (last_err != 0) last_err = AVERROR(last_err); if (last_err == 0) { @@ -587,6 +587,6 @@ int ff_http_match_no_proxy(const char *no_proxy, const char *hostname) void ff_log_net_error(void *ctx, int level, const char* prefix) { char errbuf[100]; - av_strerror(ff_neterrno(), errbuf, sizeof(errbuf)); + av_strerror(ff_neterror(), errbuf, sizeof(errbuf)); av_log(ctx, level, "%s: %s\n", prefix, errbuf); } diff --git a/libavformat/network.h b/libavformat/network.h index 728c20c9bb..f338694212 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -62,7 +62,7 @@ * @return platform-specific AVERROR value * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) */ -int ff_neterrno(void); +int ff_neterror(void); #else #include <sys/types.h> #include <sys/socket.h> @@ -75,7 +75,7 @@ int ff_neterrno(void); * @return platform-specific AVERROR value * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) */ -#define ff_neterrno() AVERROR(errno) +#define ff_neterror() AVERROR(errno) #endif /* HAVE_WINSOCK2_H */ #if HAVE_ARPA_INET_H diff --git a/libavformat/rtpproto.c b/libavformat/rtpproto.c index b1cdf061f0..e8963307f3 100644 --- a/libavformat/rtpproto.c +++ b/libavformat/rtpproto.c @@ -410,8 +410,8 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) len = recvfrom(p[i].fd, buf, size, 0, (struct sockaddr *)addrs[i], addr_lens[i]); if (len < 0) { - if (ff_neterrno() == AVERROR(EAGAIN) || - ff_neterrno() == AVERROR(EINTR)) + if (ff_neterror() == AVERROR(EAGAIN) || + ff_neterror() == AVERROR(EINTR)) continue; return AVERROR(EIO); } @@ -422,7 +422,7 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) } else if (n == 0 && h->rw_timeout > 0 && --runs <= 0) { return AVERROR(ETIMEDOUT); } else if (n < 0) { - if (ff_neterrno() == AVERROR(EINTR)) + if (ff_neterror() == AVERROR(EINTR)) continue; return AVERROR(EIO); } @@ -492,7 +492,7 @@ static int rtp_write(URLContext *h, const uint8_t *buf, int size) ret = sendto(fd, buf, size, 0, (struct sockaddr *) source, *source_len); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } if (RTP_PT_IS_RTCP(buf[1])) { diff --git a/libavformat/sctp.c b/libavformat/sctp.c index 9d9e90097e..7170a716e7 100644 --- a/libavformat/sctp.c +++ b/libavformat/sctp.c @@ -222,7 +222,7 @@ static int sctp_open(URLContext *h, const char *uri, int flags) restart: fd = ff_socket(cur_ai->ai_family, SOCK_STREAM, IPPROTO_SCTP, h); if (fd < 0) { - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } @@ -261,7 +261,7 @@ restart: av_log(h, AV_LOG_ERROR, "SCTP ERROR: Unable to initialize socket max streams %d\n", s->max_streams); - ret = ff_neterrno(); + ret = ff_neterror(); goto fail1; } } @@ -296,7 +296,7 @@ static int sctp_wait_fd(int fd, int write) int ret; ret = poll(&p, 1, 100); - return ret < 0 ? ff_neterrno() : p.revents & ev ? 0 : AVERROR(EAGAIN); + return ret < 0 ? ff_neterror() : p.revents & ev ? 0 : AVERROR(EAGAIN); } static int sctp_read(URLContext *h, uint8_t *buf, int size) @@ -319,7 +319,7 @@ static int sctp_read(URLContext *h, uint8_t *buf, int size) } else ret = recv(s->fd, buf, size, 0); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int sctp_write(URLContext *h, const uint8_t *buf, int size) @@ -345,7 +345,7 @@ static int sctp_write(URLContext *h, const uint8_t *buf, int size) } else ret = send(s->fd, buf, size, MSG_NOSIGNAL); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int sctp_close(URLContext *h) diff --git a/libavformat/tcp.c b/libavformat/tcp.c index 755e3af242..2c12ee78ad 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -226,7 +226,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags) cur_ai->ai_socktype, cur_ai->ai_protocol, h); if (fd < 0) { - ret = ff_neterrno(); + ret = ff_neterror(); cur_ai = cur_ai->ai_next; } } @@ -296,7 +296,7 @@ static int tcp_read(URLContext *h, uint8_t *buf, int size) ret = recv(s->fd, buf, size, 0); if (ret == 0) return AVERROR_EOF; - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int tcp_write(URLContext *h, const uint8_t *buf, int size) @@ -310,7 +310,7 @@ static int tcp_write(URLContext *h, const uint8_t *buf, int size) return ret; } ret = send(s->fd, buf, size, MSG_NOSIGNAL); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int tcp_shutdown(URLContext *h, int flags) @@ -357,7 +357,7 @@ static int tcp_get_window_size(URLContext *h) #endif if (getsockopt(s->fd, SOL_SOCKET, SO_RCVBUF, &avail, &avail_len)) { - return ff_neterrno(); + return ff_neterror(); } return avail; } diff --git a/libavformat/udp.c b/libavformat/udp.c index c1ebdd1222..aca3ed9ceb 100644 --- a/libavformat/udp.c +++ b/libavformat/udp.c @@ -190,7 +190,7 @@ static int udp_set_multicast_ttl(int sockfd, int mcastTTL, ff_log_net_error(logctx, AV_LOG_DEBUG, "setsockopt(IPV4/IPV6 MULTICAST TTL)"); if (setsockopt(sockfd, protocol, cmd, &ttl, sizeof(ttl)) < 0) { ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt(IPV4/IPV6 MULTICAST TTL)"); - return ff_neterrno(); + return ff_neterror(); } } @@ -211,7 +211,7 @@ static int udp_join_multicast_group(int sockfd, struct sockaddr *addr, mreq.imr_interface.s_addr = INADDR_ANY; if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const void *)&mreq, sizeof(mreq)) < 0) { ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt(IP_ADD_MEMBERSHIP)"); - return ff_neterrno(); + return ff_neterror(); } } #endif @@ -224,7 +224,7 @@ static int udp_join_multicast_group(int sockfd, struct sockaddr *addr, mreq6.ipv6mr_interface = 0; if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &mreq6, sizeof(mreq6)) < 0) { ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt(IPV6_ADD_MEMBERSHIP)"); - return ff_neterrno(); + return ff_neterror(); } } #endif @@ -294,7 +294,7 @@ static int udp_set_multicast_sources(URLContext *h, ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(MCAST_JOIN_SOURCE_GROUP)"); else ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(MCAST_BLOCK_SOURCE)"); - return ff_neterrno(); + return ff_neterror(); } } return 0; @@ -326,7 +326,7 @@ static int udp_set_multicast_sources(URLContext *h, ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(IP_ADD_SOURCE_MEMBERSHIP)"); else ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(IP_BLOCK_SOURCE)"); - return ff_neterrno(); + return ff_neterror(); } } #else @@ -508,8 +508,8 @@ static void *circular_buffer_task_rx( void *_URLContext) pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_cancelstate); pthread_mutex_lock(&s->mutex); if (len < 0) { - if (ff_neterrno() != AVERROR(EAGAIN) && ff_neterrno() != AVERROR(EINTR)) { - s->circular_buffer_error = ff_neterrno(); + if (ff_neterror() != AVERROR(EAGAIN) && ff_neterror() != AVERROR(EINTR)) { + s->circular_buffer_error = ff_neterror(); goto end; } continue; @@ -621,7 +621,7 @@ static void *circular_buffer_task_tx( void *_URLContext) len -= ret; p += ret; } else { - ret = ff_neterrno(); + ret = ff_neterror(); if (ret != AVERROR(EAGAIN) && ret != AVERROR(EINTR)) { pthread_mutex_lock(&s->mutex); s->circular_buffer_error = ret; @@ -797,7 +797,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) if (s->reuse_socket > 0 || (s->is_multicast && s->reuse_socket < 0)) { s->reuse_socket = 1; if (setsockopt (udp_fd, SOL_SOCKET, SO_REUSEADDR, &(s->reuse_socket), sizeof(s->reuse_socket)) != 0) { - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } } @@ -805,7 +805,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) if (s->is_broadcast) { #ifdef SO_BROADCAST if (setsockopt (udp_fd, SOL_SOCKET, SO_BROADCAST, &(s->is_broadcast), sizeof(s->is_broadcast)) != 0) { - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } #else @@ -829,7 +829,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) if (dscp >= 0) { dscp <<= 2; if (setsockopt (udp_fd, IPPROTO_IP, IP_TOS, &dscp, sizeof(dscp)) != 0) { - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } } @@ -846,7 +846,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) /* the bind is needed to give a port to the socket now */ if (bind_ret < 0 && bind(udp_fd,(struct sockaddr *)&my_addr, len) < 0) { ff_log_net_error(h, AV_LOG_ERROR, "bind failed"); - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } @@ -890,7 +890,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) tmp = s->buffer_size; if (setsockopt(udp_fd, SOL_SOCKET, SO_SNDBUF, &tmp, sizeof(tmp)) < 0) { ff_log_net_error(h, AV_LOG_ERROR, "setsockopt(SO_SNDBUF)"); - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } } else { @@ -914,7 +914,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) if (s->is_connected) { if (connect(udp_fd, (struct sockaddr *) &s->dest_addr, s->dest_addr_len)) { ff_log_net_error(h, AV_LOG_ERROR, "connect"); - ret = ff_neterrno(); + ret = ff_neterror(); goto fail; } } @@ -1045,7 +1045,7 @@ static int udp_read(URLContext *h, uint8_t *buf, int size) } ret = recvfrom(s->udp_fd, buf, size, 0, (struct sockaddr *)&addr, &addr_len); if (ret < 0) - return ff_neterrno(); + return ff_neterror(); if (ff_ip_check_source_lists(&addr, &s->filters)) return AVERROR(EINTR); return ret; @@ -1098,7 +1098,7 @@ static int udp_write(URLContext *h, const uint8_t *buf, int size) } else ret = send(s->udp_fd, buf, size, 0); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int udp_close(URLContext *h) diff --git a/libavformat/unix.c b/libavformat/unix.c index 5704155cf0..d1b4e6a5ca 100644 --- a/libavformat/unix.c +++ b/libavformat/unix.c @@ -70,7 +70,7 @@ static int unix_open(URLContext *h, const char *filename, int flags) av_strlcpy(s->addr.sun_path, filename, sizeof(s->addr.sun_path)); if ((fd = ff_socket(AF_UNIX, s->type, 0, h)) < 0) - return ff_neterrno(); + return ff_neterror(); if (s->timeout < 0 && h->rw_timeout) s->timeout = h->rw_timeout / 1000; @@ -113,7 +113,7 @@ static int unix_read(URLContext *h, uint8_t *buf, int size) ret = recv(s->fd, buf, size, 0); if (!ret && s->type == SOCK_STREAM) return AVERROR_EOF; - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int unix_write(URLContext *h, const uint8_t *buf, int size) @@ -127,7 +127,7 @@ static int unix_write(URLContext *h, const uint8_t *buf, int size) return ret; } ret = send(s->fd, buf, size, MSG_NOSIGNAL); - return ret < 0 ? ff_neterrno() : ret; + return ret < 0 ? ff_neterror() : ret; } static int unix_close(URLContext *h) diff --git a/libavformat/url.h b/libavformat/url.h index 0784d77b64..a6b48d06d9 100644 --- a/libavformat/url.h +++ b/libavformat/url.h @@ -150,7 +150,7 @@ int ffurl_open_whitelist(URLContext **puc, const char *filename, int flags, * * @param s server context * @param c client context, must be unallocated. - * @return >= 0 on success, ff_neterrno() on failure. + * @return >= 0 on success, ff_neterror() on failure. */ int ffurl_accept(URLContext *s, URLContext **c); -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v5 3/6] avformat/network: add ff_neterror2() for cases that don't use WSAGetLastError 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 1/6] Add documentation for ff_neterrno() Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 2/6] Rename "ff_neterrno()" to "ff_neterror()" Andrew Sayers @ 2024-05-16 11:59 ` Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 4/6] avformat/network: add ff_neterror2() for compatibility with Windows Andrew Sayers ` (3 subsequent siblings) 6 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 11:59 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers For example, WSAStartup()'s documentation says: "A call to the WSAGetLastError function is not needed and should not be used" --- libavformat/network.c | 5 ++++- libavformat/network.h | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libavformat/network.c b/libavformat/network.c index 5d0d05c5f1..351dc34bb6 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -123,7 +123,10 @@ void ff_network_close(void) #if HAVE_WINSOCK2_H int ff_neterror(void) { - int err = WSAGetLastError(); + return ff_neterror2(WSAGetLastError()); +} +int ff_neterror2(int err) +{ switch (err) { case WSAEWOULDBLOCK: return AVERROR(EAGAIN); diff --git a/libavformat/network.h b/libavformat/network.h index f338694212..1ac067f09f 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -63,6 +63,12 @@ * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) */ int ff_neterror(void); +/* + * @brief ff_neterror()-style AVERROR + * @param err error code (usually an errno or Windows Sockets Error Code) + * @note Windows Sockets Error Codes are only supported in Windows + */ +int ff_neterror2(int err); #else #include <sys/types.h> #include <sys/socket.h> -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v5 4/6] avformat/network: add ff_neterror2() for compatibility with Windows 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers ` (2 preceding siblings ...) 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 3/6] avformat/network: add ff_neterror2() for cases that don't use WSAGetLastError Andrew Sayers @ 2024-05-16 11:59 ` Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 5/6] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers ` (2 subsequent siblings) 6 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 11:59 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers This is not currently used anywhere, but included to avoid potential future surprises. --- libavformat/network.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libavformat/network.h b/libavformat/network.h index 1ac067f09f..7c8f81a050 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -82,6 +82,12 @@ int ff_neterror2(int err); * @note Error is based on WSAGetLastError() (Windows) or `errno` (otherwise) */ #define ff_neterror() AVERROR(errno) +/* + * @brief ff_neterror()-style AVERROR + * @param err error code (usually an errno or Windows Sockets Error Code) + * @note Windows Sockets Error Codes are only supported in Windows + */ +#define ff_neterror2(ERRNO) AVERROR(ERRNO) #endif /* HAVE_WINSOCK2_H */ #if HAVE_ARPA_INET_H -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v5 5/6] avformat/network: Return 0/AVERROR from ff_network_init() 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers ` (3 preceding siblings ...) 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 4/6] avformat/network: add ff_neterror2() for compatibility with Windows Andrew Sayers @ 2024-05-16 11:59 ` Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 6/6] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 2024-05-31 9:07 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers 6 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 11:59 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avio.c | 7 +++++-- libavformat/network.c | 7 +++---- libavformat/rtsp.c | 14 ++++++++------ libavformat/rtspdec.c | 5 +++-- libavformat/sapdec.c | 5 +++-- libavformat/sapenc.c | 5 +++-- 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/libavformat/avio.c b/libavformat/avio.c index d109f3adff..8c94bfeb14 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -123,8 +123,11 @@ static int url_alloc_for_protocol(URLContext **puc, const URLProtocol *up, int err; #if CONFIG_NETWORK - if (up->flags & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init()) - return AVERROR(EIO); + if (up->flags & URL_PROTOCOL_FLAG_NETWORK) { + err = ff_network_init(); + if (err<0) + return err; + } #endif if ((flags & AVIO_FLAG_READ) && !up->url_read) { av_log(NULL, AV_LOG_ERROR, diff --git a/libavformat/network.c b/libavformat/network.c index 351dc34bb6..643294efe4 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -59,11 +59,10 @@ int ff_network_init(void) { #if HAVE_WINSOCK2_H WSADATA wsaData; - - if (WSAStartup(MAKEWORD(1,1), &wsaData)) - return 0; + return ff_neterror2(WSAStartup(MAKEWORD(1,1), &wsaData)); +#else + return 0; #endif - return 1; } int ff_network_wait_fd(int fd, int write) diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index b0c61ee00a..d50d0b7fc0 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -1740,8 +1740,9 @@ int ff_rtsp_connect(AVFormatContext *s) return AVERROR(EINVAL); } - if (!ff_network_init()) - return AVERROR(EIO); + err = ff_network_init(); + if (err<0) + return err; if (s->max_delay < 0) /* Not set by the caller */ s->max_delay = s->iformat ? DEFAULT_REORDERING_DELAY : 0; @@ -2395,8 +2396,9 @@ static int sdp_read_header(AVFormatContext *s) char url[MAX_URL_SIZE]; AVBPrint bp; - if (!ff_network_init()) - return AVERROR(EIO); + err = ff_network_init(); + if (err<0) + return err; if (s->max_delay < 0) /* Not set by the caller */ s->max_delay = DEFAULT_REORDERING_DELAY; @@ -2522,8 +2524,8 @@ static int rtp_read_header(AVFormatContext *s) AVBPrint sdp; AVDictionary *opts = NULL; - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; opts = map_to_opts(rt); ret = ffurl_open_whitelist(&in, s->url, AVIO_FLAG_READ, diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index 10078ce2fa..1b4b478170 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -663,8 +663,9 @@ static int rtsp_listen(AVFormatContext *s) int ret; enum RTSPMethod methodcode; - if (!ff_network_init()) - return AVERROR(EIO); + ret = ff_network_init(); + if (ret<0) + return ret; /* extract hostname and port */ av_url_split(proto, sizeof(proto), auth, sizeof(auth), host, sizeof(host), diff --git a/libavformat/sapdec.c b/libavformat/sapdec.c index 357c0dd514..393e544556 100644 --- a/libavformat/sapdec.c +++ b/libavformat/sapdec.c @@ -70,8 +70,9 @@ static int sap_read_header(AVFormatContext *s) int port; int ret, i; - if (!ff_network_init()) - return AVERROR(EIO); + ret = ff_network_init(); + if (ret<0) + return ret; av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &port, path, sizeof(path), s->url); diff --git a/libavformat/sapenc.c b/libavformat/sapenc.c index 87a834a8d8..5760e3a0c2 100644 --- a/libavformat/sapenc.c +++ b/libavformat/sapenc.c @@ -80,8 +80,9 @@ static int sap_write_header(AVFormatContext *s) int udp_fd; AVDictionaryEntry* title = av_dict_get(s->metadata, "title", NULL, 0); - if (!ff_network_init()) - return AVERROR(EIO); + ret = ff_network_init(); + if (ret<0) + return ret; /* extract hostname and port */ av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &base_port, -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v5 6/6] avformat/avformat: Document return codes for av_format_(de)init 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers ` (4 preceding siblings ...) 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 5/6] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers @ 2024-05-16 11:59 ` Andrew Sayers 2024-05-31 9:07 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers 6 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 11:59 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avformat.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 8afdcd9fd0..f624fb1e2e 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1944,12 +1944,16 @@ const char *avformat_license(void); * This function will be deprecated once support for older GnuTLS and * OpenSSL libraries is removed, and this function has no purpose * anymore. + * + * @return 0 for success or AVERROR code */ int avformat_network_init(void); /** * Undo the initialization done by avformat_network_init. Call it only * once for each time you called avformat_network_init. + * + * @return 0 for success or AVERROR code */ int avformat_network_deinit(void); -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers ` (5 preceding siblings ...) 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 6/6] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers @ 2024-05-31 9:07 ` Andrew Sayers 6 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-31 9:07 UTC (permalink / raw) To: FFmpeg development discussions and patches On Thu, May 16, 2024 at 12:59:05PM +0100, Andrew Sayers wrote: > On Thu, May 16, 2024 at 01:42:23PM +0300, Rémi Denis-Courmont wrote: > > Err, please. Keep this to the Windows back-end. Nothing good is going to happen with a function that does nothing (on other platforms) and has a nondescript numbered name. > > I have no strong opinion either way, and it feels rather bikesheddable. > Here's a version with the offending part moved to its own patch - > I'm happy for whoever applies this to decide whether they want to > keep or chuck patch 4/6 :) Ping? _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v4 4/5] avformat/network: Return 0/AVERROR from ff_network_init() 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 0/5] avformat/network: improve ff_neterrno() Andrew Sayers ` (2 preceding siblings ...) 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 3/5] avformat/network: add ff_neterror2() for cases where we already have an error Andrew Sayers @ 2024-05-16 9:33 ` Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 5/5] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 4 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 9:33 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avio.c | 7 +++++-- libavformat/network.c | 7 +++---- libavformat/rtsp.c | 14 ++++++++------ libavformat/rtspdec.c | 5 +++-- libavformat/sapdec.c | 5 +++-- libavformat/sapenc.c | 5 +++-- 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/libavformat/avio.c b/libavformat/avio.c index d109f3adff..8c94bfeb14 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -123,8 +123,11 @@ static int url_alloc_for_protocol(URLContext **puc, const URLProtocol *up, int err; #if CONFIG_NETWORK - if (up->flags & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init()) - return AVERROR(EIO); + if (up->flags & URL_PROTOCOL_FLAG_NETWORK) { + err = ff_network_init(); + if (err<0) + return err; + } #endif if ((flags & AVIO_FLAG_READ) && !up->url_read) { av_log(NULL, AV_LOG_ERROR, diff --git a/libavformat/network.c b/libavformat/network.c index 351dc34bb6..643294efe4 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -59,11 +59,10 @@ int ff_network_init(void) { #if HAVE_WINSOCK2_H WSADATA wsaData; - - if (WSAStartup(MAKEWORD(1,1), &wsaData)) - return 0; + return ff_neterror2(WSAStartup(MAKEWORD(1,1), &wsaData)); +#else + return 0; #endif - return 1; } int ff_network_wait_fd(int fd, int write) diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index b0c61ee00a..d50d0b7fc0 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -1740,8 +1740,9 @@ int ff_rtsp_connect(AVFormatContext *s) return AVERROR(EINVAL); } - if (!ff_network_init()) - return AVERROR(EIO); + err = ff_network_init(); + if (err<0) + return err; if (s->max_delay < 0) /* Not set by the caller */ s->max_delay = s->iformat ? DEFAULT_REORDERING_DELAY : 0; @@ -2395,8 +2396,9 @@ static int sdp_read_header(AVFormatContext *s) char url[MAX_URL_SIZE]; AVBPrint bp; - if (!ff_network_init()) - return AVERROR(EIO); + err = ff_network_init(); + if (err<0) + return err; if (s->max_delay < 0) /* Not set by the caller */ s->max_delay = DEFAULT_REORDERING_DELAY; @@ -2522,8 +2524,8 @@ static int rtp_read_header(AVFormatContext *s) AVBPrint sdp; AVDictionary *opts = NULL; - if (!ff_network_init()) - return AVERROR(EIO); + if ((ret = ff_network_init())<0) + return ret; opts = map_to_opts(rt); ret = ffurl_open_whitelist(&in, s->url, AVIO_FLAG_READ, diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index 10078ce2fa..1b4b478170 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -663,8 +663,9 @@ static int rtsp_listen(AVFormatContext *s) int ret; enum RTSPMethod methodcode; - if (!ff_network_init()) - return AVERROR(EIO); + ret = ff_network_init(); + if (ret<0) + return ret; /* extract hostname and port */ av_url_split(proto, sizeof(proto), auth, sizeof(auth), host, sizeof(host), diff --git a/libavformat/sapdec.c b/libavformat/sapdec.c index 357c0dd514..393e544556 100644 --- a/libavformat/sapdec.c +++ b/libavformat/sapdec.c @@ -70,8 +70,9 @@ static int sap_read_header(AVFormatContext *s) int port; int ret, i; - if (!ff_network_init()) - return AVERROR(EIO); + ret = ff_network_init(); + if (ret<0) + return ret; av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &port, path, sizeof(path), s->url); diff --git a/libavformat/sapenc.c b/libavformat/sapenc.c index 87a834a8d8..5760e3a0c2 100644 --- a/libavformat/sapenc.c +++ b/libavformat/sapenc.c @@ -80,8 +80,9 @@ static int sap_write_header(AVFormatContext *s) int udp_fd; AVDictionaryEntry* title = av_dict_get(s->metadata, "title", NULL, 0); - if (!ff_network_init()) - return AVERROR(EIO); + ret = ff_network_init(); + if (ret<0) + return ret; /* extract hostname and port */ av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &base_port, -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
* [FFmpeg-devel] [PATCH v4 5/5] avformat/avformat: Document return codes for av_format_(de)init 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 0/5] avformat/network: improve ff_neterrno() Andrew Sayers ` (3 preceding siblings ...) 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 4/5] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers @ 2024-05-16 9:33 ` Andrew Sayers 4 siblings, 0 replies; 34+ messages in thread From: Andrew Sayers @ 2024-05-16 9:33 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Andrew Sayers --- libavformat/avformat.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 8afdcd9fd0..f624fb1e2e 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1944,12 +1944,16 @@ const char *avformat_license(void); * This function will be deprecated once support for older GnuTLS and * OpenSSL libraries is removed, and this function has no purpose * anymore. + * + * @return 0 for success or AVERROR code */ int avformat_network_init(void); /** * Undo the initialization done by avformat_network_init. Call it only * once for each time you called avformat_network_init. + * + * @return 0 for success or AVERROR code */ int avformat_network_deinit(void); -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 34+ messages in thread
end of thread, other threads:[~2024-05-31 9:07 UTC | newest] Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-04-19 16:59 [FFmpeg-devel] [PATCH 1/2] avformat/utils: handle errors > 0 in avformat_network_init() Andrew Sayers 2024-04-19 16:59 ` [FFmpeg-devel] [PATCH 2/2] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 2024-04-19 17:04 ` [FFmpeg-devel] [PATCH 1/2] avformat/utils: handle errors > 0 in avformat_network_init() James Almer 2024-04-19 17:23 ` [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() Andrew Sayers 2024-04-19 17:23 ` [FFmpeg-devel] [PATCH v2 2/2] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 2024-04-19 17:37 ` [FFmpeg-devel] [PATCH v2 1/2] avformat/network: Return a proper negative error code from ff_network_init() James Almer 2024-04-19 19:07 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Andrew Sayers 2024-04-19 19:08 ` [FFmpeg-devel] [PATCH v3 2/3] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers 2024-04-19 19:08 ` [FFmpeg-devel] [PATCH v3 3/3] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 2024-04-20 7:57 ` [FFmpeg-devel] [PATCH v3 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Stefano Sabatini 2024-04-20 13:24 ` [FFmpeg-devel] [PATCH v4 " Andrew Sayers 2024-04-20 13:25 ` [FFmpeg-devel] [PATCH v4 2/3] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers 2024-05-05 20:05 ` Marton Balint 2024-05-07 13:12 ` Andrew Sayers 2024-04-20 13:25 ` [FFmpeg-devel] [PATCH v4 3/3] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 2024-04-27 8:46 ` [FFmpeg-devel] [PATCH v4 1/3] avformat/network: add ff_neterrno2() for cases where we already have an errno Andrew Sayers 2024-05-05 19:59 ` [FFmpeg-devel] [PATCH v3 " Marton Balint 2024-05-07 13:41 ` Andrew Sayers 2024-05-07 21:05 ` Marton Balint 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 0/5] avformat/network: improve ff_neterrno() Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 1/5] Add documentation for ff_neterrno() Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 2/5] Rename "ff_neterrno()" to "ff_neterror()" Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 3/5] avformat/network: add ff_neterror2() for cases where we already have an error Andrew Sayers 2024-05-16 10:42 ` Rémi Denis-Courmont 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 1/6] Add documentation for ff_neterrno() Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 2/6] Rename "ff_neterrno()" to "ff_neterror()" Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 3/6] avformat/network: add ff_neterror2() for cases that don't use WSAGetLastError Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 4/6] avformat/network: add ff_neterror2() for compatibility with Windows Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 5/6] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers 2024-05-16 11:59 ` [FFmpeg-devel] [PATCH v5 6/6] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers 2024-05-31 9:07 ` [FFmpeg-devel] [PATCH v5 0/6] avformat/network: improve ff_neterrno() Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 4/5] avformat/network: Return 0/AVERROR from ff_network_init() Andrew Sayers 2024-05-16 9:33 ` [FFmpeg-devel] [PATCH v4 5/5] avformat/avformat: Document return codes for av_format_(de)init Andrew Sayers
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git