metalink_parse_final man page on MacOSX

Man page or keyword search:  
man Server   23457 pages
apropos Keyword Search (all sections)
Output format
MacOSX logo
[printable version]

METALINK_PARSE_UPDATE(3)      libmetalink Manual      METALINK_PARSE_UPDATE(3)

NAME
       metalink_parse_update,	 metalink_parse_final,	  metalink_parser_con‐
       text_new, metalink_parser_context_delete - Parse Metalink file and cre‐
       ate metalink_t object.

SYNOPSIS
       #include <metalink/metalink.h>

       metalink_error_t	 metalink_parse_update(metalink_parser_context_t *ctx,
					       const char *buf, size_t len);
       metalink_error_t	 metalink_parse_final(metalink_parser_context_t	 *ctx,
					       const  char  *buf,  size_t len,
					       metalink_t **res);

       metalink_parser_context_t* metalink_parser_context_new();
       void metalink_parser_context_delete(metalink_parser_context_t *ctx);

DESCRIPTION
       These functions provide a  push	interface  for	parsing	 Metalink  XML
       files.

       Before calling metalink_parse_update() and metalink_parse_final(), met‐
       alink_parse_context_t  has  to  be  created   by	  metalink_parser_con‐
       text_new().

       In  each	 call  of  metalink_parse_update(),  len bytes of buf are pro‐
       cessed.	At the last piece of data, call metalink_parse_final() to  get
       metalink_t(3) structure as a result.  Giving 0 as len is permitted.

       metalink_parse_final()  calls  metalink_parser_context_delete()	inter‐
       nally to deallocate the memory  for  passed  metalink_parser_context_t.
       Therefore  you  don't  have to call metlaink_parser_context_delete() if
       you call metalink_parse_final().	 Otherwise  call  metalink_parser_con‐
       text_delete() to free the allocated resource.

       You  don't  have	 to allocate memory for metalink_t(3) structure.  met‐
       alink_parse_final() takes the  pointer  of  metalink_t(3)  pointer  and
       allocates memory for that pointer.

       The  caller  must free the memory allocated for metalink_t(3) structure
       using metalink_delete(3) if it is no longer used.

RETURN VALUE
       metalink_parse_update(), metalink_parse_final() return 0	 for  success.
       When  error  occurred, non-zero value error code is returned.  If error
       occurred, metalink_parse_final() does  not  allocate  memory  for  met‐
       alink_t. The error codes are described in metalink_error.h.

       In  case of success, metalink_parser_context_new() allocates memory for
       metalink_parser_context_t() and returns the pointer to it.  In case  of
       failure, metalink_parser_context_new() returns NULL.

       metalink_parser_context_delete() returns no value.

EXAMPLE
       #include <stdio.h>
       #include <stdlib.h>
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>
       #include <errno.h>
       #include <string.h>
       #include <unistd.h>
       #include <metalink/metalink.h>

       int main(int argc, char** argv)
       {
	 metalink_error_t r;
	 metalink_t* metalink;
	 metalink_file_t* file;
	 metalink_checksum_t** checksums;
	 metalink_parser_context_t* context;
	 int fd;
	 char buf[BUFSIZ];
	 ssize_t length;

	 context = metalink_parser_context_new();

	 if(context == NULL) {
	   fprintf(stderr,
		   "ERROR: failed to create metalink_parser_context_t\n");
	   exit(EXIT_FAILURE);
	 }

	 fd = open("sample.metalink", O_RDONLY);
	 if(fd == -1) {
	   fprintf(stderr, "ERROR: open():%s\n", strerror(errno));
	   exit(EXIT_FAILURE);
	 }
	 while((length = TEMP_FAILURE_RETRY(read(fd, buf, sizeof(buf)))) != 0){
	   r = metalink_parse_update(context, buf, length);
	   if(r != 0) {
	     fprintf(stderr, "ERROR: code=%d\n", r);
	     metalink_parser_context_delete(context);
	     exit(EXIT_FAILURE);
	   }
	 }
	 if(length == -1) {
	   fprintf(stderr, "ERROR: read():%s\n", strerror(errno));
	   metalink_parser_context_delete(context);
	   exit(EXIT_FAILURE);
	 }

	 r = metalink_parse_final(context, NULL, 0, &metalink);

	 if(r != 0) {
	   fprintf(stderr, "ERROR: code=%d\n", r);
	   exit(EXIT_FAILURE);
	 }

	 TEMP_FAILURE_RETRY(close(fd));

	 file = metalink->files[0];
	 printf("name: %s\n", file->name);
	 printf("size: %lld\n", file->size);
	 printf("os  : %s\n", file->os);

	 if(file->checksums) {
	   checksums = file->checksums;
	   while(*checksums) {
	     printf("hash: %s %s\n", (*checksums)->type, (*checksums)->hash);
	     ++checksums;
	   }
	 }
	 if(file->chunk_checksum) {
	   size_t count = 0;
	   metalink_piece_hash_t** piece_hashes;
	   printf("chunk checksum: size=%d, type=%s\n",
		  file->chunk_checksum->length,
		  file->chunk_checksum->type);
	   printf("first 5 piece hashes...\n");
	   piece_hashes = file->chunk_checksum->piece_hashes;
	   while(*piece_hashes && count < 5) {
	     printf("piece=%d, hash=%s\n", (*piece_hashes)->piece,
					    (*piece_hashes)->hash);
	     ++piece_hashes;
	     ++count;
	   }
	   printf("...\n");
	 }
	 if(file->resources) {
	   size_t count = 0;
	   metalink_resource_t** resources;
	   printf("first 5 resources...\n");
	   resources = file->resources;
	   while(*resources && count < 5) {
	     printf("type=%s, location=%s, preference=%d, url=%s\n",
		    (*resources)->type, (*resources)->location,
		    (*resources)->preference, (*resources)->url);
	     ++resources;
	     ++count;
	   }
	   printf("...\n");
	 }

	 /* delete metalink_t */
	 metalink_delete(metalink);

	 return EXIT_SUCCESS;
       }

SEE ALSO
       metalink_delete(3), metalink_parse_file(3), metalink_t(3)

libmetalink 0.1.0		   July 2012	      METALINK_PARSE_UPDATE(3)
[top]

List of man pages available for MacOSX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net