getht-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getht-commit] arch commit: getht--mainline--0.1--patch-21


From: Nick
Subject: [Getht-commit] arch commit: getht--mainline--0.1--patch-21
Date: Sun, 29 Apr 2007 14:08:20 +0100
User-agent: Mutt/1.5.13 (2006-08-11)

Revision: getht--mainline--0.1--patch-21
Archive: address@hidden
Creator: Nick White <address@hidden>
Date: Sun Apr 29 14:07:45 BST 2007
Standard-date: 2007-04-29 13:07:45 GMT
New-files: .arch-ids/issuemem.c.id issuemem.c
Modified-files: Makefile download.c getht.c issue.h mediaxml.c
    tocxml.c
New-patches: address@hidden/getht--mainline--0.1--patch-21
Summary: Completed issue malloc, fixed build warnings
Keywords: 

Used malloc to dynamically assign enough memory for sections,
items, and media, using the functionality of issuemem.c

Included some function definitions in issue.h to remove
various build warnings
A  .arch-ids/issuemem.c.id
A  issuemem.c
M  Makefile
M  download.c
M  getht.c
M  issue.h
M  mediaxml.c
M  tocxml.c

* modified files

--- orig/Makefile
+++ mod/Makefile
@@ -5,7 +5,7 @@
 
 all: getht
 
-getht: download.o config.o tocxml.o mediarev.o mediaxml.o xml.o
+getht: download.o config.o issuemem.o tocxml.o mediarev.o mediaxml.o xml.o
 
 tocxml.o mediaxml.o: xml.o
 


--- orig/download.c
+++ mod/download.c
@@ -162,10 +162,10 @@
                }
 
        int count;
-       for(cur_section = issue->section, count = 0;
-                       count <= issue->no_of_sections;
-                       cur_section++, count++)
+       for(count = 0; count <= issue->no_of_sections; count++)
        {
+               cur_section = issue->section[count];
+
                snprintf(filename,STR_MAX,"%s/section_%i.pdf", newdir, 
cur_section->number);
                if(!force){
                        testfile = fopen(filename, "r");


--- orig/getht.c
+++ mod/getht.c
@@ -208,9 +208,6 @@
                        }
                }
 
-               if(showstr)
-                       show_iss_struct(issue, no_of_issues);
-
                if(latest_index == -1)
                {
                        fprintf(stderr, "Error: Cannot ascertain latest issue. 
");
@@ -228,9 +225,8 @@
                        downloadissue(NULL, save_path, issue[latest_index], 
force);
        }
        
-       if(downmedia)
+       if(downmedia || showstr)
        {
-               med * cur_media;
                int newest;
 
                issue = parsemedia(media_xml, issue, &no_of_issues);
@@ -255,7 +251,7 @@
                {
                        newest = findnewestiss(issue, no_of_issues);
                        for(i = 0; i <= issue[newest]->no_of_media; i++)
-                               downloadmedia(NULL, save_path, 
&(issue[newest]->media[i]), force);
+                               downloadmedia(NULL, save_path, 
issue[newest]->media[i], force);
                }
 
                if(downallmedia)
@@ -263,17 +259,13 @@
                        for(i = 0; i <= no_of_issues; i++)
                        {
                                for(newest = 0; newest <= 
issue[i]->no_of_media; newest++)
-                                       downloadmedia(NULL, save_path, 
&(issue[i]->media[newest]), force);
+                                       downloadmedia(NULL, save_path, 
issue[i]->media[newest], force);
                        }
                }
        }
 
-       if(no_of_issues > -1)
-       {
-               for(i = 0; i < no_of_issues; i++)
-                       free(issue[i]);
-               free(issue);
-       }
+       if(showstr)
+               show_iss_struct(issue, no_of_issues);
 
        /* Ensure curl cleans itself up */
        curl_easy_cleanup(main_curl_handle);
@@ -331,7 +323,7 @@
 void show_iss_struct(iss ** issue, int no_of_issues)
 /*     Prints issue information */
 {
-       int iss_no, sec_no, it_no;
+       int iss_no, sec_no, med_no, it_no;
        printf("%i Issues\n",no_of_issues);
        for(iss_no=0;iss_no<no_of_issues;iss_no++)
        {
@@ -345,20 +337,32 @@
                for(sec_no=0; sec_no <= (issue[iss_no]->no_of_sections); 
sec_no++)
                {
                        printf("\t-Section %i-\n", (sec_no));
-                       printf("\tTitle:\t'%s'\n", 
issue[iss_no]->section[sec_no].title);
-                       printf("\tURI:\t'%s'\n", 
issue[iss_no]->section[sec_no].uri);
-                       printf("\tNo. of Items:\t'%i'\n", 
issue[iss_no]->section[sec_no].no_of_items);
+                       printf("\tTitle:\t'%s'\n", 
issue[iss_no]->section[sec_no]->title);
+                       printf("\tURI:\t'%s'\n", 
issue[iss_no]->section[sec_no]->uri);
+                       printf("\tNo. of Items:\t'%i'\n", 
issue[iss_no]->section[sec_no]->no_of_items);
 
-                       for(it_no=0; it_no < 
issue[iss_no]->section[sec_no].no_of_items; it_no++)
+                       for(it_no=0; it_no <= 
issue[iss_no]->section[sec_no]->no_of_items; it_no++)
                        {
                                printf("\t\t-Item-\n");
-                               
printf("\t\tTitle:\t'%s'\n",issue[iss_no]->section[sec_no].item[it_no].title);
-                               printf("\t\tFirst 
page:\t'%i'",issue[iss_no]->section[sec_no].item[it_no].firstpage);
-                               printf("\tLast 
page:\t'%i'\n",issue[iss_no]->section[sec_no].item[it_no].lastpage);
+                               
printf("\t\tTitle:\t'%s'\n",issue[iss_no]->section[sec_no]->item[it_no]->title);
+                               printf("\t\tFirst 
page:\t'%i'",issue[iss_no]->section[sec_no]->item[it_no]->firstpage);
+                               printf("\tLast 
page:\t'%i'\n",issue[iss_no]->section[sec_no]->item[it_no]->lastpage);
                        }
                        it_no = 0;
                }
                sec_no = 0;
+
+               printf("Number of Media:\t'%i'\n",issue[iss_no]->no_of_media);
+
+               for(med_no=0; med_no <= (issue[iss_no]->no_of_media); med_no++)
+               {
+                       printf("\t-Media %i-\n", (med_no));
+                       printf("\tTitle:\t'%s'\n", 
issue[iss_no]->media[med_no]->title);
+                       printf("\tURI:\t'%s'\n", 
issue[iss_no]->media[med_no]->uri);
+                       printf("\tComment:\t'%s'\n", 
issue[iss_no]->media[med_no]->comment);
+                       printf("\tPreview URI:\t'%s'\n", 
issue[iss_no]->media[med_no]->preview_uri);
+               }
+               med_no = 0;
        }
 }
 
@@ -389,24 +393,22 @@
                cur_issue->preview_uri[0] = '\0';
                cur_issue->title[0] = '\0';
                cur_issue->size = 0;
-               cur_issue->no_of_sections = 0;
-               cur_issue->no_of_media = 0;
-               clearmed(cur_issue->media);
+               cur_issue->no_of_sections = -1;
+               cur_issue->section = NULL;
+               cur_issue->no_of_media = -1;
+               cur_issue->media = NULL;
+               //clearmed(cur_issue->media);
        }
 }
 
 void clearmed(med * cur_media)
-/*     clears all members of media arrays */
+/*     clears the members of a media array */
 {
-       int tmp;
-       for(tmp=0; tmp<=MED_NO; cur_media++,tmp++)
-       {
-               cur_media->uri[0] = '\0';
-               cur_media->title[0] = '\0';
-               cur_media->comment[0] = '\0';
-               cur_media->preview_uri[0] = '\0';
-               cur_media->size = 0;
-       }
+       cur_media->uri[0] = '\0';
+       cur_media->title[0] = '\0';
+       cur_media->comment[0] = '\0';
+       cur_media->preview_uri[0] = '\0';
+       cur_media->size = 0;
 }
 
 void clearsec(sec * cur_section)


--- orig/issue.h
+++ mod/issue.h
@@ -45,7 +45,7 @@
        char title[512];
        int number;
        int size;
-       it item[ITEM_NO];
+       it ** item;
        int no_of_items;
 } sec;
 
@@ -64,8 +64,15 @@
        char title[512];
        int size;
        issdates date;
-       sec section[SEC_NO];
+       sec ** section;
        int no_of_sections;
-       med media[MED_NO];
+       med ** media;
        int no_of_media;
 } iss;
+
+iss ** parsetoc(char *filepath, int * iss_no, int * latest);
+iss ** parsemedia(char * filepath, iss ** issue, int * no_of_issues);
+
+iss ** assignnew_iss(int *no_of_issues, iss ** issue);
+sec ** assignnew_sec(int *no_of_sections, sec ** section);
+it ** assignnew_it(int * no_of_items, it ** item);


--- orig/mediaxml.c
+++ mod/mediaxml.c
@@ -165,7 +165,7 @@
 
                        if(!issue_there)
                        {       /* advance to the next free issue */
-                               iss ** tmpiss;
+                               iss ** tmpiss = NULL;
                                if(*no_of_issues == -1)
                                {       /* make issue** a new array of issue 
pointers */
                                        if( (tmpiss = malloc(sizeof(iss *))) == 
NULL )
@@ -194,9 +194,11 @@
                                tmp = *no_of_issues;
                        }
 
+                       iss * cur_issue = issue[tmp];
+
                        issue[tmp]->no_of_media = -1;
-                       cur_media = issue[tmp]->media;
 
+                       med ** tmpmed = NULL;
 
                        itnode = node->xmlChildrenNode;
 
@@ -205,6 +207,31 @@
 
                                if(!xmlStrcmp(itnode->name,(char *) "item"))
                                {
+                                       /* assign memory for new media */
+                                       if(cur_issue->no_of_media < 0)
+                                       {       /* make **section a new array 
of section pointers */
+                                               if( (tmpmed = malloc(sizeof(med 
*))) == NULL )
+                                               nogo_mem();
+                                       }
+                                       else
+                                       {       /* add a new pointer to media 
pointer list */
+                                               if( (tmpmed = 
realloc(cur_issue->media, sizeof(med *) + ((cur_issue->no_of_media+1) * 
sizeof(med *)))) == NULL )
+                                               nogo_mem();
+                                       }
+
+                                       cur_issue->no_of_media++;
+
+                                       /* make new array item a pointer to 
issue */
+                                       if( (tmpmed[cur_issue->no_of_media] = 
malloc(sizeof(med))) == NULL )
+                                               nogo_mem();
+
+                                       cur_issue->media = tmpmed;
+                                       /* memory for seoction all dealt with */
+
+                                       cur_media = 
cur_issue->media[cur_issue->no_of_media];
+                                       
+                                       clearmed(cur_media);
+
                                        /* add media info to cur_media */
                                        if(xmlGetProp(itnode, "uri"))
                                                strncpy(cur_media->uri, (char 
*) xmlGetProp(itnode, "uri"), STR_MAX);
@@ -216,10 +243,6 @@
                                                strncpy(cur_media->preview_uri, 
(char *) xmlGetProp(itnode, "preview_uri"), STR_MAX);
 
                                        strncpy(cur_media->title, (char *) 
xmlNodeListGetString(media_file, itnode->xmlChildrenNode, 1), STR_MAX);
-
-                                       issue[tmp]->no_of_media++;
-
-                                       cur_media++;
                                }
                                
                                itnode = itnode->next;


--- orig/tocxml.c
+++ mod/tocxml.c
@@ -29,7 +29,6 @@
 #include "getht.h"
 
 iss ** parsetoc(char *filepath, int * iss_no, int * latest);
-iss ** parseyear(xmlDocPtr file, xmlNodePtr node, iss ** issue, int * latest);
 int parseissue(xmlDocPtr file, xmlNodePtr node, iss * cur_issue, int * latest);
 void parsesection(xmlDocPtr file, xmlNodePtr node, sec * cur_section);
 
@@ -37,17 +36,8 @@
 
 int no_of_issues;
 
-void nogo_mem()
-/*     called if memory assignation fails
-       TODO: handle freeing of memory to avoid leaks */
-{
-       fprintf(stderr, "Could not assign memory, exitting\n");
-       exit(1);
-}
-
 iss ** parsetoc(char *filepath, int * iss_no, int * latest)
-/*     starts parsing of xml to issue structure
-       TODO: combine with parseyear */
+/*     starts parsing of xml to issue structure        */
 {
        xmlDocPtr file;
        xmlNodePtr node;
@@ -59,10 +49,10 @@
 
        no_of_issues = -1;
 
-       iss ** issue;
+       iss ** issue = NULL;
+       //iss ** tmp = NULL;
 
        int year;
-       iss ** tmp;
 
        xmlNodePtr cnode;
 
@@ -75,29 +65,21 @@
                        {
                                if(!xmlStrncmp(cnode->name,(char *) "issue",5))
                                {
-                                       if(no_of_issues < 0)
-                                       {       /* make issue** a new array of 
issue pointers */
-                                               if( (tmp = malloc(sizeof(iss 
*))) == NULL )
-                                                       nogo_mem();
-                                       }
-                                       else
-                                       {       /* add a new pointer to issue 
pointer list */
-                                               if( (tmp = realloc(issue, 
sizeof(iss *) + ((no_of_issues+1) * sizeof(iss *)))) == NULL )
-                                                       nogo_mem();
-                                       }
-
-                                       no_of_issues++;
-
-                                       /* make new array item a pointer to 
issue */
-                                       if( (tmp[no_of_issues] = 
malloc(sizeof(iss))) == NULL )
-                                               nogo_mem();
-
-                                       issue = tmp;
-
-                                       issue[no_of_issues]->no_of_media = -1; 
/* set default no of media */
-                                       issue[no_of_issues]->date.year = atoi( 
(const char *)(xmlStrsub(node->name,5,4)) );
-                                       
tokenise_hyphons(xmlStrsub(cnode->name,6,5), 
&(issue[no_of_issues]->date.firstmonth), 
&(issue[no_of_issues]->date.lastmonth));
-                                       issue[no_of_issues]->no_of_sections = 
parseissue(file, cnode, issue[no_of_issues], latest);
+                                       /* assign memory for the new issue */
+                                       issue = assignnew_iss(&no_of_issues, 
issue);
+
+                                       /* setup issue globals */
+                                       issue[no_of_issues]->no_of_media = -1;
+                                       issue[no_of_issues]->no_of_sections = 
-1;
+                                       issue[no_of_issues]->date.year =
+                                               atoi( (const char 
*)(xmlStrsub(node->name,5,4)) );
+                                       tokenise_hyphons(
+                                                       
xmlStrsub(cnode->name,6,5),
+                                                       
&(issue[no_of_issues]->date.firstmonth),
+                                                       
&(issue[no_of_issues]->date.lastmonth));
+
+                                       /* parse the issue */
+                                       parseissue(file, cnode, 
issue[no_of_issues], latest);
                                }
                                cnode = cnode->next;
                        }
@@ -113,39 +95,40 @@
 }
 
 int parseissue(xmlDocPtr file, xmlNodePtr node, iss * cur_issue, int * latest)
-/*     parses issue from xml, saving in cur_issue structure */
+/*     parses issue from xml, saving in cur_issue structure    */
 {
-       int no_of_sections = -1;
-
        strncpy(cur_issue->title, (char *) xmlGetProp(node, "title"), STR_MAX);
        strncpy(cur_issue->preview_uri, (char *) xmlGetProp(node, "coverlink"), 
STR_MAX);
 
        if(xmlGetProp(node, "current") && *latest==-1)
                *latest = no_of_issues;
 
-       sec * cur_section = NULL;
-
        node = node->xmlChildrenNode;
 
        while(node != NULL){
                if(!xmlStrncmp(node->name, (char *) "section",7) ||
                        !xmlStrcmp(node->name, (const xmlChar *) "cover"))
                {
-                       no_of_sections++;
-                       cur_section = &(cur_issue->section[no_of_sections]);
+                       /* assign memory for new section */
+                       cur_issue->section = 
+                               assignnew_sec(&(cur_issue->no_of_sections), 
cur_issue->section);
 
-                       parsesection(file, node, cur_section);
+                       /* setup section globals */
+                       
cur_issue->section[cur_issue->no_of_sections]->no_of_items = -1;
+
+                       /* parse the section */
+                       parsesection(file, node, 
cur_issue->section[cur_issue->no_of_sections]);
                }
                node = node->next;
        }
 
-       return no_of_sections;
+       return 0;
 }
 
 void parsesection(xmlDocPtr file, xmlNodePtr node, sec * cur_section)
 /*     parses section xml, filling cur_section structure */
 {
-       it * cur_item;
+       it * cur_item = NULL;
 
        strncpy(cur_section->uri, (char *) xmlGetProp(node, "pdflink"), 
STR_MAX);
        strncpy(cur_section->title, (char *) xmlGetProp(node, "title"), 
STR_MAX);
@@ -155,31 +138,38 @@
        else
                cur_section->number = atoi( (const char 
*)(xmlStrsub(node->name,8,1)) );
 
-       cur_item = cur_section->item;
-       cur_section->no_of_items = 0;
-
        node = node->xmlChildrenNode;
 
        char * pagenums;
 
+       it ** tmp = NULL;
+
        while(node != NULL)
        {
                if(!xmlStrcmp(node->name, (const xmlChar *) "item"))
                {
-                       cur_section->no_of_items++;
-                       cur_item->title = xmlNodeListGetString(file, 
node->xmlChildrenNode, 1);
-                       if(pagenums = (char *) xmlGetProp(node, "pages"))
-                               tokenise_hyphons(pagenums, 
&(cur_item->firstpage), &(cur_item->lastpage));
-                       else
+                       if(xmlNodeListGetString(file, node->xmlChildrenNode, 1) 
!= NULL)
+                       /* ignore items without titles */
                        {
-                               cur_item->firstpage = 0;
-                               cur_item->lastpage = 0;
+                               /* assign memory for new item */
+                               cur_section->item =
+                                       assignnew_it( 
&(cur_section->no_of_items), cur_section->item);
+
+                               cur_item = 
cur_section->item[cur_section->no_of_items];
+
+                               /* parse item */
+                               cur_item->title = xmlNodeListGetString(file, 
node->xmlChildrenNode, 1);
+                               if(pagenums = (char *) xmlGetProp(node, 
"pages"))
+                                       tokenise_hyphons(pagenums, 
&(cur_item->firstpage), &(cur_item->lastpage));
+                               else
+                               {
+                                       cur_item->firstpage = 0;
+                                       cur_item->lastpage = 0;
+                               }
                        }
-                       cur_item++;
                }
        node = node->next;      
        }
-       cur_item = 0;
 }
 
 void tokenise_hyphons(char to_token[10], int * first, int * last)



* added files

--- /dev/null
+++ 
/home/nick/programming/c/getht/getht-mainline/,,address@hidden/new-files-archive/./.arch-ids/issuemem.c.id
@@ -0,0 +1 @@
+Nick White <address@hidden> Sun Apr 29 14:07:34 2007 6736.0
--- /dev/null
+++ 
/home/nick/programming/c/getht/getht-mainline/,,address@hidden/new-files-archive/./issuemem.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2006 Nick White
+ *
+ * This file is part of GetHT
+ * 
+ * GetHT is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GetHT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GetHT; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "issue.h"
+
+void nogo_mem()
+/*     called if memory assignation fails
+ *     TODO: handle freeing of memory to avoid leaks */
+{
+       fprintf(stderr, "Could not assign memory, exitting\n");
+       exit(1);
+}
+
+iss ** assignnew_iss(int *no_of_issues, iss ** issue)
+/* assign memory for new issue */
+{
+       iss ** tmp = NULL;
+
+       if(*no_of_issues < 0)
+       {       /* make issue** a new array of issue pointers */
+               if( (tmp = malloc(sizeof(iss *))) == NULL )
+                       nogo_mem();
+       }
+       else
+       {       /* add a new pointer to issue pointer list */
+               if( (tmp = realloc(issue, sizeof(iss *) + (((*no_of_issues)+1) 
* sizeof(iss *)))) == NULL )
+                       nogo_mem();
+       }
+
+       (*no_of_issues)++;
+       
+       /* make new array item a pointer to issue */
+       if( (tmp[*no_of_issues] = malloc(sizeof(iss))) == NULL )
+               nogo_mem();
+
+       return tmp;
+}
+
+sec ** assignnew_sec(int *no_of_sections, sec ** section)
+/* assign memory for new section */
+{
+       sec ** tmp = NULL;
+
+       if(*no_of_sections < 0)
+       {       /* make **section a new array of section pointers */
+               if( (tmp = malloc(sizeof(sec *))) == NULL )
+                       nogo_mem();
+       }
+       else
+       {       /* add a new pointer to section pointer list */
+               if( (tmp = realloc(section, sizeof(sec *) + 
(((*no_of_sections)+1) * sizeof(sec *)))) == NULL )
+                       nogo_mem();
+       }
+       
+       (*no_of_sections)++;
+
+       /* make new array item a pointer to issue */
+       if( (tmp[*no_of_sections] = malloc(sizeof(sec))) == NULL )
+               nogo_mem();
+
+       return tmp;
+}
+
+it ** assignnew_it(int * no_of_items, it ** item)
+{
+       it ** tmp = NULL;
+
+       if(*no_of_items < 0)
+       {       /* make **item a new array of item pointers */
+               if( (tmp = malloc(sizeof(it *))) == NULL )
+                       nogo_mem();
+                                                                               
                        }
+       else
+       {       /* add a new pointer to item pointer list */
+               if( (tmp = realloc(item, sizeof(it *) + (((*no_of_items)+1) * 
sizeof(it *)))) == NULL )
+                       nogo_mem();
+       }
+
+       (*no_of_items)++;
+
+       /* make new array item a pointer to item */
+       if( (tmp[*no_of_items] = malloc(sizeof(it))) == NULL )
+               nogo_mem();
+
+       return tmp;
+}

Attachment: pgpjcAyAdv1Tj.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]