Originally committed as revision 9406 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -21,6 +21,7 @@ | |||
| #include "avformat.h" | |||
| #include "cmdutils.h" | |||
| #include "avstring.h" | |||
| #undef exit | |||
| @@ -37,10 +38,10 @@ void show_help_options(const OptionDef *options, const char *msg, int mask, int | |||
| printf("%s", msg); | |||
| first = 0; | |||
| } | |||
| pstrcpy(buf, sizeof(buf), po->name); | |||
| av_strlcpy(buf, po->name, sizeof(buf)); | |||
| if (po->flags & HAS_ARG) { | |||
| pstrcat(buf, sizeof(buf), " "); | |||
| pstrcat(buf, sizeof(buf), po->argname); | |||
| av_strlcat(buf, " ", sizeof(buf)); | |||
| av_strlcat(buf, po->argname, sizeof(buf)); | |||
| } | |||
| printf("-%-17s %s\n", buf, po->help); | |||
| } | |||
| @@ -26,6 +26,7 @@ | |||
| #include "framehook.h" | |||
| #include "opt.h" | |||
| #include "fifo.h" | |||
| #include "avstring.h" | |||
| #ifdef __MINGW32__ | |||
| #include <conio.h> | |||
| @@ -2908,7 +2909,7 @@ static void new_audio_stream(AVFormatContext *oc) | |||
| audio_enc->sample_rate = audio_sample_rate; | |||
| audio_enc->time_base= (AVRational){1, audio_sample_rate}; | |||
| if (audio_language) { | |||
| pstrcpy(st->language, sizeof(st->language), audio_language); | |||
| av_strlcpy(st->language, audio_language, sizeof(st->language)); | |||
| av_free(audio_language); | |||
| audio_language = NULL; | |||
| } | |||
| @@ -2954,7 +2955,7 @@ static void opt_new_subtitle_stream(void) | |||
| } | |||
| if (subtitle_language) { | |||
| pstrcpy(st->language, sizeof(st->language), subtitle_language); | |||
| av_strlcpy(st->language, subtitle_language, sizeof(st->language)); | |||
| av_free(subtitle_language); | |||
| subtitle_language = NULL; | |||
| } | |||
| @@ -3006,10 +3007,10 @@ static void opt_output_file(const char *filename) | |||
| } | |||
| oc->oformat = file_oformat; | |||
| pstrcpy(oc->filename, sizeof(oc->filename), filename); | |||
| av_strlcpy(oc->filename, filename, sizeof(oc->filename)); | |||
| if (!strcmp(file_oformat->name, "ffm") && | |||
| strstart(filename, "http:", NULL)) { | |||
| av_strstart(filename, "http:", NULL)) { | |||
| /* special case for files sent to ffserver: we get the stream | |||
| parameters from ffserver */ | |||
| if (read_ffserver_streams(oc, filename) < 0) { | |||
| @@ -3049,15 +3050,15 @@ static void opt_output_file(const char *filename) | |||
| oc->timestamp = rec_timestamp; | |||
| if (str_title) | |||
| pstrcpy(oc->title, sizeof(oc->title), str_title); | |||
| av_strlcpy(oc->title, str_title, sizeof(oc->title)); | |||
| if (str_author) | |||
| pstrcpy(oc->author, sizeof(oc->author), str_author); | |||
| av_strlcpy(oc->author, str_author, sizeof(oc->author)); | |||
| if (str_copyright) | |||
| pstrcpy(oc->copyright, sizeof(oc->copyright), str_copyright); | |||
| av_strlcpy(oc->copyright, str_copyright, sizeof(oc->copyright)); | |||
| if (str_comment) | |||
| pstrcpy(oc->comment, sizeof(oc->comment), str_comment); | |||
| av_strlcpy(oc->comment, str_comment, sizeof(oc->comment)); | |||
| if (str_album) | |||
| pstrcpy(oc->album, sizeof(oc->album), str_album); | |||
| av_strlcpy(oc->album, str_album, sizeof(oc->album)); | |||
| } | |||
| output_files[nb_output_files++] = oc; | |||
| @@ -3074,7 +3075,7 @@ static void opt_output_file(const char *filename) | |||
| /* test if it already exists to avoid loosing precious files */ | |||
| if (!file_overwrite && | |||
| (strchr(filename, ':') == NULL || | |||
| strstart(filename, "file:", NULL))) { | |||
| av_strstart(filename, "file:", NULL))) { | |||
| if (url_exist(filename)) { | |||
| int c; | |||
| @@ -21,6 +21,7 @@ | |||
| #include "avformat.h" | |||
| #include "swscale.h" | |||
| #include "avstring.h" | |||
| #include "version.h" | |||
| #include "cmdutils.h" | |||
| @@ -2109,7 +2110,7 @@ static VideoState *stream_open(const char *filename, AVInputFormat *iformat) | |||
| is = av_mallocz(sizeof(VideoState)); | |||
| if (!is) | |||
| return NULL; | |||
| pstrcpy(is->filename, sizeof(is->filename), filename); | |||
| av_strlcpy(is->filename, filename, sizeof(is->filename)); | |||
| is->iformat = iformat; | |||
| is->ytop = 0; | |||
| is->xleft = 0; | |||
| @@ -42,6 +42,7 @@ | |||
| #include "version.h" | |||
| #include "ffserver.h" | |||
| #include "random.h" | |||
| #include "avstring.h" | |||
| #undef exit | |||
| @@ -390,7 +391,7 @@ static void start_children(FFStream *feed) | |||
| close(i); | |||
| } | |||
| pstrcpy(pathname, sizeof(pathname), my_program_name); | |||
| av_strlcpy(pathname, my_program_name, sizeof(pathname)); | |||
| slash = strrchr(pathname, '/'); | |||
| if (!slash) { | |||
| @@ -1144,17 +1145,17 @@ static void compute_real_filename(char *filename, int max_size) | |||
| FFStream *stream; | |||
| /* compute filename by matching without the file extensions */ | |||
| pstrcpy(file1, sizeof(file1), filename); | |||
| av_strlcpy(file1, filename, sizeof(file1)); | |||
| p = strrchr(file1, '.'); | |||
| if (p) | |||
| *p = '\0'; | |||
| for(stream = first_stream; stream != NULL; stream = stream->next) { | |||
| pstrcpy(file2, sizeof(file2), stream->filename); | |||
| av_strlcpy(file2, stream->filename, sizeof(file2)); | |||
| p = strrchr(file2, '.'); | |||
| if (p) | |||
| *p = '\0'; | |||
| if (!strcmp(file1, file2)) { | |||
| pstrcpy(filename, max_size, stream->filename); | |||
| av_strlcpy(filename, stream->filename, max_size); | |||
| break; | |||
| } | |||
| } | |||
| @@ -1187,7 +1188,7 @@ static int http_parse_request(HTTPContext *c) | |||
| p = c->buffer; | |||
| get_word(cmd, sizeof(cmd), (const char **)&p); | |||
| pstrcpy(c->method, sizeof(c->method), cmd); | |||
| av_strlcpy(c->method, cmd, sizeof(c->method)); | |||
| if (!strcmp(cmd, "GET")) | |||
| c->post = 0; | |||
| @@ -1197,13 +1198,13 @@ static int http_parse_request(HTTPContext *c) | |||
| return -1; | |||
| get_word(url, sizeof(url), (const char **)&p); | |||
| pstrcpy(c->url, sizeof(c->url), url); | |||
| av_strlcpy(c->url, url, sizeof(c->url)); | |||
| get_word(protocol, sizeof(protocol), (const char **)&p); | |||
| if (strcmp(protocol, "HTTP/1.0") && strcmp(protocol, "HTTP/1.1")) | |||
| return -1; | |||
| pstrcpy(c->protocol, sizeof(c->protocol), protocol); | |||
| av_strlcpy(c->protocol, protocol, sizeof(c->protocol)); | |||
| if (ffserver_debug) | |||
| http_log("New connection: %s %s\n", cmd, url); | |||
| @@ -1211,13 +1212,13 @@ static int http_parse_request(HTTPContext *c) | |||
| /* find the filename and the optional info string in the request */ | |||
| p = strchr(url, '?'); | |||
| if (p) { | |||
| pstrcpy(info, sizeof(info), p); | |||
| av_strlcpy(info, p, sizeof(info)); | |||
| *p = '\0'; | |||
| } else { | |||
| info[0] = '\0'; | |||
| } | |||
| pstrcpy(filename, sizeof(filename)-1, url + ((*url == '/') ? 1 : 0)); | |||
| av_strlcpy(filename, url + ((*url == '/') ? 1 : 0), sizeof(filename)-1); | |||
| for (p = c->buffer; *p && *p != '\r' && *p != '\n'; ) { | |||
| if (strncasecmp(p, "User-Agent:", 11) == 0) { | |||
| @@ -1254,7 +1255,7 @@ static int http_parse_request(HTTPContext *c) | |||
| // "redirect" / request to index.html | |||
| if (!strlen(filename)) | |||
| pstrcpy(filename, sizeof(filename) - 1, "index.html"); | |||
| av_strlcpy(filename, "index.html", sizeof(filename) - 1); | |||
| stream = first_stream; | |||
| while (stream != NULL) { | |||
| @@ -1392,7 +1393,7 @@ static int http_parse_request(HTTPContext *c) | |||
| { | |||
| char hostname[256], *p; | |||
| /* extract only hostname */ | |||
| pstrcpy(hostname, sizeof(hostname), hostbuf); | |||
| av_strlcpy(hostname, hostbuf, sizeof(hostname)); | |||
| p = strrchr(hostname, ':'); | |||
| if (p) | |||
| *p = '\0'; | |||
| @@ -1634,7 +1635,7 @@ static void compute_stats(HTTPContext *c) | |||
| char *eosf; | |||
| if (stream->feed != stream) { | |||
| pstrcpy(sfilename, sizeof(sfilename) - 10, stream->filename); | |||
| av_strlcpy(sfilename, stream->filename, sizeof(sfilename) - 10); | |||
| eosf = sfilename + strlen(sfilename); | |||
| if (eosf - sfilename >= 4) { | |||
| if (strcmp(eosf - 4, ".asf") == 0) { | |||
| @@ -1998,14 +1999,14 @@ static int http_prepare_data(HTTPContext *c) | |||
| switch(c->state) { | |||
| case HTTPSTATE_SEND_DATA_HEADER: | |||
| memset(&c->fmt_ctx, 0, sizeof(c->fmt_ctx)); | |||
| pstrcpy(c->fmt_ctx.author, sizeof(c->fmt_ctx.author), | |||
| c->stream->author); | |||
| pstrcpy(c->fmt_ctx.comment, sizeof(c->fmt_ctx.comment), | |||
| c->stream->comment); | |||
| pstrcpy(c->fmt_ctx.copyright, sizeof(c->fmt_ctx.copyright), | |||
| c->stream->copyright); | |||
| pstrcpy(c->fmt_ctx.title, sizeof(c->fmt_ctx.title), | |||
| c->stream->title); | |||
| av_strlcpy(c->fmt_ctx.author, c->stream->author, | |||
| sizeof(c->fmt_ctx.author)); | |||
| av_strlcpy(c->fmt_ctx.comment, c->stream->comment, | |||
| sizeof(c->fmt_ctx.comment)); | |||
| av_strlcpy(c->fmt_ctx.copyright, c->stream->copyright, | |||
| sizeof(c->fmt_ctx.copyright)); | |||
| av_strlcpy(c->fmt_ctx.title, c->stream->title, | |||
| sizeof(c->fmt_ctx.title)); | |||
| /* open output stream by using specified codecs */ | |||
| c->fmt_ctx.oformat = c->stream->fmt; | |||
| @@ -2586,9 +2587,9 @@ static int rtsp_parse_request(HTTPContext *c) | |||
| get_word(url, sizeof(url), &p); | |||
| get_word(protocol, sizeof(protocol), &p); | |||
| pstrcpy(c->method, sizeof(c->method), cmd); | |||
| pstrcpy(c->url, sizeof(c->url), url); | |||
| pstrcpy(c->protocol, sizeof(c->protocol), protocol); | |||
| av_strlcpy(c->method, cmd, sizeof(c->method)); | |||
| av_strlcpy(c->url, url, sizeof(c->url)); | |||
| av_strlcpy(c->protocol, protocol, sizeof(c->protocol)); | |||
| c->pb = &pb1; | |||
| if (url_open_dyn_buf(c->pb) < 0) { | |||
| @@ -3073,7 +3074,7 @@ static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPHeader *h) | |||
| return; | |||
| } | |||
| pstrcpy(session_id, sizeof(session_id), rtp_c->session_id); | |||
| av_strlcpy(session_id, rtp_c->session_id, sizeof(session_id)); | |||
| /* abort the session */ | |||
| close_connection(rtp_c); | |||
| @@ -3115,7 +3116,7 @@ static HTTPContext *rtp_new_connection(struct sockaddr_in *from_addr, | |||
| goto fail; | |||
| nb_connections++; | |||
| c->stream = stream; | |||
| pstrcpy(c->session_id, sizeof(c->session_id), session_id); | |||
| av_strlcpy(c->session_id, session_id, sizeof(c->session_id)); | |||
| c->state = HTTPSTATE_READY; | |||
| c->is_packetized = 1; | |||
| c->rtp_protocol = rtp_protocol; | |||
| @@ -3135,8 +3136,8 @@ static HTTPContext *rtp_new_connection(struct sockaddr_in *from_addr, | |||
| proto_str = "???"; | |||
| break; | |||
| } | |||
| pstrcpy(c->protocol, sizeof(c->protocol), "RTP/"); | |||
| pstrcat(c->protocol, sizeof(c->protocol), proto_str); | |||
| av_strlcpy(c->protocol, "RTP/", sizeof(c->protocol)); | |||
| av_strlcat(c->protocol, proto_str, sizeof(c->protocol)); | |||
| current_bandwidth += stream->bandwidth; | |||
| @@ -19,6 +19,7 @@ | |||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||
| */ | |||
| #include "avformat.h" | |||
| #include "avstring.h" | |||
| #include <fcntl.h> | |||
| #include <unistd.h> | |||
| #include <sys/time.h> | |||
| @@ -31,7 +32,7 @@ static int file_open(URLContext *h, const char *filename, int flags) | |||
| int access; | |||
| int fd; | |||
| strstart(filename, "file:", &filename); | |||
| av_strstart(filename, "file:", &filename); | |||
| if (flags & URL_RDWR) { | |||
| access = O_CREAT | O_TRUNC | O_RDWR; | |||
| @@ -63,7 +63,7 @@ static int http_open_cnx(URLContext *h) | |||
| proxy_path = getenv("http_proxy"); | |||
| use_proxy = (proxy_path != NULL) && !getenv("no_proxy") && | |||
| strstart(proxy_path, "http://", NULL); | |||
| av_strstart(proxy_path, "http://", NULL); | |||
| /* fill the dest addr */ | |||
| redo: | |||
| @@ -126,7 +126,7 @@ static int http_open(URLContext *h, const char *uri, int flags) | |||
| h->priv_data = s; | |||
| s->filesize = -1; | |||
| s->off = 0; | |||
| pstrcpy (s->location, URL_SIZE, uri); | |||
| av_strlcpy(s->location, uri, URL_SIZE); | |||
| ret = http_open_cnx(h); | |||
| if (ret != 0) | |||
| @@ -47,6 +47,7 @@ | |||
| #include "rtp_internal.h" | |||
| #include "rtp_h264.h" | |||
| #include "base64.h" | |||
| #include "avstring.h" | |||
| /** | |||
| RTP/H264 specific private data. | |||
| @@ -357,7 +358,7 @@ static int parse_h264_sdp_line(AVStream * stream, void *data, | |||
| assert(h264_data->cookie == MAGIC_COOKIE); | |||
| if (strstart(p, "framesize:", &p)) { | |||
| if (av_strstart(p, "framesize:", &p)) { | |||
| char buf1[50]; | |||
| char *dst = buf1; | |||
| @@ -375,7 +376,7 @@ static int parse_h264_sdp_line(AVStream * stream, void *data, | |||
| codec->width = atoi(buf1); | |||
| codec->height = atoi(p + 1); // skip the - | |||
| codec->pix_fmt = PIX_FMT_YUV420P; | |||
| } else if (strstart(p, "fmtp:", &p)) { | |||
| } else if (av_strstart(p, "fmtp:", &p)) { | |||
| char attr[256]; | |||
| char value[4096]; | |||
| @@ -390,7 +391,7 @@ static int parse_h264_sdp_line(AVStream * stream, void *data, | |||
| /* grab the codec extra_data from the config parameter of the fmtp line */ | |||
| sdp_parse_fmtp_config_h264(stream, h264_data, attr, value); | |||
| } | |||
| } else if (strstart(p, "cliprect:", &p)) { | |||
| } else if (av_strstart(p, "cliprect:", &p)) { | |||
| // could use this if we wanted. | |||
| } | |||
| @@ -19,6 +19,7 @@ | |||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||
| */ | |||
| #include "avformat.h" | |||
| #include "avstring.h" | |||
| #include <unistd.h> | |||
| #include <stdarg.h> | |||
| @@ -72,11 +73,11 @@ static void url_add_option(char *buf, int buf_size, const char *fmt, ...) | |||
| va_start(ap, fmt); | |||
| if (strchr(buf, '?')) | |||
| pstrcat(buf, buf_size, "&"); | |||
| av_strlcat(buf, "&", buf_size); | |||
| else | |||
| pstrcat(buf, buf_size, "?"); | |||
| av_strlcat(buf, "?", buf_size); | |||
| vsnprintf(buf1, sizeof(buf1), fmt, ap); | |||
| pstrcat(buf, buf_size, buf1); | |||
| av_strlcat(buf, buf1, buf_size); | |||
| va_end(ap); | |||
| } | |||
| @@ -80,7 +80,7 @@ int rtsp_default_protocols = (1 << RTSP_PROTOCOL_RTP_UDP); | |||
| static int rtsp_probe(AVProbeData *p) | |||
| { | |||
| if (strstart(p->filename, "rtsp:", NULL)) | |||
| if (av_strstart(p->filename, "rtsp:", NULL)) | |||
| return AVPROBE_SCORE_MAX; | |||
| return 0; | |||
| } | |||
| @@ -338,7 +338,7 @@ static void rtsp_parse_range_npt(const char *p, int64_t *start, int64_t *end) | |||
| char buf[256]; | |||
| skip_spaces(&p); | |||
| if (!stristart(p, "npt=", &p)) | |||
| if (!av_stristart(p, "npt=", &p)) | |||
| return; | |||
| *start = AV_NOPTS_VALUE; | |||
| @@ -460,7 +460,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, | |||
| av_strlcpy(rtsp_st->control_url, s->filename, sizeof(rtsp_st->control_url)); | |||
| break; | |||
| case 'a': | |||
| if (strstart(p, "control:", &p) && s->nb_streams > 0) { | |||
| if (av_strstart(p, "control:", &p) && s->nb_streams > 0) { | |||
| char proto[32]; | |||
| /* get the control url */ | |||
| st = s->streams[s->nb_streams - 1]; | |||
| @@ -475,7 +475,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, | |||
| } else { | |||
| av_strlcpy(rtsp_st->control_url, p, sizeof(rtsp_st->control_url)); | |||
| } | |||
| } else if (strstart(p, "rtpmap:", &p)) { | |||
| } else if (av_strstart(p, "rtpmap:", &p)) { | |||
| /* NOTE: rtpmap is only supported AFTER the 'm=' tag */ | |||
| get_word(buf1, sizeof(buf1), &p); | |||
| payload_type = atoi(buf1); | |||
| @@ -486,7 +486,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, | |||
| sdp_parse_rtpmap(st->codec, rtsp_st, payload_type, p); | |||
| } | |||
| } | |||
| } else if (strstart(p, "fmtp:", &p)) { | |||
| } else if (av_strstart(p, "fmtp:", &p)) { | |||
| /* NOTE: fmtp is only supported AFTER the 'a=rtpmap:xxx' tag */ | |||
| get_word(buf1, sizeof(buf1), &p); | |||
| payload_type = atoi(buf1); | |||
| @@ -503,7 +503,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, | |||
| } | |||
| } | |||
| } | |||
| } else if(strstart(p, "framesize:", &p)) { | |||
| } else if(av_strstart(p, "framesize:", &p)) { | |||
| // let dynamic protocol handlers have a stab at the line. | |||
| get_word(buf1, sizeof(buf1), &p); | |||
| payload_type = atoi(buf1); | |||
| @@ -516,7 +516,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, | |||
| } | |||
| } | |||
| } | |||
| } else if(strstart(p, "range:", &p)) { | |||
| } else if(av_strstart(p, "range:", &p)) { | |||
| int64_t start, end; | |||
| // this is so that seeking on a streamed file can work. | |||
| @@ -683,15 +683,15 @@ void rtsp_parse_line(RTSPHeader *reply, const char *buf) | |||
| /* NOTE: we do case independent match for broken servers */ | |||
| p = buf; | |||
| if (stristart(p, "Session:", &p)) { | |||
| if (av_stristart(p, "Session:", &p)) { | |||
| get_word_sep(reply->session_id, sizeof(reply->session_id), ";", &p); | |||
| } else if (stristart(p, "Content-Length:", &p)) { | |||
| } else if (av_stristart(p, "Content-Length:", &p)) { | |||
| reply->content_length = strtol(p, NULL, 10); | |||
| } else if (stristart(p, "Transport:", &p)) { | |||
| } else if (av_stristart(p, "Transport:", &p)) { | |||
| rtsp_parse_transport(reply, p); | |||
| } else if (stristart(p, "CSeq:", &p)) { | |||
| } else if (av_stristart(p, "CSeq:", &p)) { | |||
| reply->seq = strtol(p, NULL, 10); | |||
| } else if (stristart(p, "Range:", &p)) { | |||
| } else if (av_stristart(p, "Range:", &p)) { | |||
| rtsp_parse_range_npt(p, &reply->range_start, &reply->range_end); | |||
| } | |||
| } | |||
| @@ -1327,7 +1327,7 @@ static int sdp_probe(AVProbeData *p1) | |||
| /* we look for a line beginning "c=IN IP4" */ | |||
| while (p < p_end && *p != '\0') { | |||
| if (p + sizeof("c=IN IP4") - 1 < p_end && strstart(p, "c=IN IP4", NULL)) | |||
| if (p + sizeof("c=IN IP4") - 1 < p_end && av_strstart(p, "c=IN IP4", NULL)) | |||
| return AVPROBE_SCORE_MAX / 2; | |||
| while(p < p_end - 1 && *p != '\n') p++; | |||
| @@ -1432,8 +1432,8 @@ static int redir_probe(AVProbeData *pd) | |||
| p = pd->buf; | |||
| while (redir_isspace(*p)) | |||
| p++; | |||
| if (strstart(p, "http://", NULL) || | |||
| strstart(p, "rtsp://", NULL)) | |||
| if (av_strstart(p, "http://", NULL) || | |||
| av_strstart(p, "rtsp://", NULL)) | |||
| return AVPROBE_SCORE_MAX; | |||
| return 0; | |||
| } | |||