src/cdnaAli/findCdna/findCdna.c 1.5
1.5 2009/09/23 18:42:15 angie
Fixed compiler warnings from gcc 4.3.3, mostly about system calls whose return values weren't checked and non-literal format strings with no args.
Index: src/cdnaAli/findCdna/findCdna.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/cdnaAli/findCdna/findCdna.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -b -B -U 1000000 -r1.4 -r1.5
--- src/cdnaAli/findCdna/findCdna.c 20 Jun 2006 19:20:07 -0000 1.4
+++ src/cdnaAli/findCdna/findCdna.c 23 Sep 2009 18:42:15 -0000 1.5
@@ -1,164 +1,164 @@
/* Quick lookup of cDNA based on binary search of index file, etc. */
#include "common.h"
#include "snof.h"
void *mustAlloc(int size)
{
void *ret;
ret = malloc(size);
if (ret == NULL)
{
fprintf(stderr, "Out of memory %d bytes\n", size);
exit(-2);
}
return ret;
}
void printTo(FILE *f, char untilC)
{
int c;
for (;;)
{
c = getc(f);
if (c == EOF)
break;
if (c == untilC)
{
putchar(c);
break;
}
}
for (;;)
{
c = getc(f);
if (c == untilC || c == EOF)
break;
putchar(c);
}
}
struct nameList
{
struct nameList *next;
char *name;
};
struct nameList *newNameList(char *name)
{
int len = strlen(name);
struct nameList *nl;
int allocSize = len+1+sizeof(*nl);
nl = mustAlloc(allocSize);
nl->next = NULL;
nl->name = (char *)(nl+1);
strcpy(nl->name, name);
return nl;
}
struct nameList *findCdnaNames(char *geneName, struct snof *snof, FILE *f)
{
char lineBuf[1024*2];
char *words[256];
int wordCount;
int i;
struct nameList *list = NULL;
long offset;
if (!snofFindOffset(snof, geneName, &offset))
return NULL;
fseek(f, offset, SEEK_SET);
-fgets(lineBuf, sizeof(lineBuf), f);
+mustGetLine(f, lineBuf, sizeof(lineBuf));
wordCount = chopString(lineBuf, whiteSpaceChopper, words, ArraySize(words));
assert(strcmp(words[0], geneName) == 0);
for (i=1; i<wordCount; ++i)
{
struct nameList *el;
el = newNameList(words[i]);
el->next = list;
list = el;
}
slReverse(&list);
return list;
}
int main(int argc, char *argv[])
{
FILE *faFile, *g2cFile, *inputFile;
long faOffset;
char *faName = "\\biodata\\celegans\\cDNA\\allcdna.fa";
char *faIndexName = "\\biodata\\celegans\\cDNA\\allcdna";
char *g2cName = "\\biodata\\celegans\\cDNA\\gene2cdna.txt";
char *g2cIndexName = "\\biodata\\celegans\\cDNA\\gene2cdna";
char *inputName;
struct snof *faSnof;
struct snof *g2cSnof;
if (argc != 2)
{
fprintf(stderr, "Usage: %s inputFile\n", argv[0]);
exit(-1);
}
/* Grab input file name and open file. */
inputName = argv[1];
inputFile = mustOpen(inputName, "r");
/* Open fa file (with actual sequence) */
faFile = mustOpen(faName, "rb");
/* Open file that has list of cDNA's and genes */
g2cFile = mustOpen(g2cName, "r");
/* Open and initialize index file. */
if ((faSnof = snofOpen(faIndexName)) == NULL)
{
fprintf(stderr, "%s isn't a good index file, sorry\n", faIndexName);
exit(-1);
}
if ((g2cSnof = snofOpen(g2cIndexName)) == NULL)
{
fprintf(stderr, "%s isn't a good index file, sorry\n", g2cIndexName);
exit(-1);
}
/* Loop through each line of input file. Grab gene name from it.
* Then scan through g2c file to find names of cDNAs that go with it. */
for (;;)
{
char lineBuf[256];
char *words[16];
int wordCount;
if (fgets(lineBuf, sizeof(lineBuf), inputFile) == NULL)
break;
printf("%s", lineBuf);
wordCount = chopString(lineBuf, whiteSpaceChopper, words, ArraySize(words));
if (wordCount > 0)
{
char *geneName = words[0];
struct nameList *cdnaNames = findCdnaNames(geneName, g2cSnof, g2cFile);
struct nameList *el;
printf(">>Gene %s\n", geneName);
if (cdnaNames == NULL)
printf("No cDNA\n");
for (el = cdnaNames; el != NULL; el = el->next)
{
if (!snofFindOffset(faSnof, el->name, &faOffset))
{
fprintf(stderr, "Can't find cDNA %s\n", el->name);
}
else
{
fseek(faFile, faOffset, SEEK_SET);
printTo(faFile, '>');
}
}
printf("\n");
}
}
snofClose(&faSnof);
snofClose(&g2cSnof);
return 0;
}