[PATCH 3/9] v2.1 add compile-time enabled debugging code for btrfs

Gene Czarcinski gczarcinski at ec.rr.com
Mon Sep 15 12:50:46 UTC 2014


This patch add a "bunch" of debugging code supporting the
implementation of btrfs support.  This code will only produce
output if DEBUG is enabled.
---
 grubby.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 88 insertions(+), 3 deletions(-)

diff --git a/grubby.c b/grubby.c
index 773f55e..451d291 100644
--- a/grubby.c
+++ b/grubby.c
@@ -1395,7 +1395,14 @@ static struct grubConfig * readConfig(const char * inName,
 		entry->lines = line;
 	    else
 		last->next = line;
-	    dbgPrintf("readConfig added %s to %p\n", getKeyByType(line->type, cfi), entry);
+	    if ((line->numElements == 0) && (line->type == LT_WHITESPACE)) {
+		dbgPrintf("readConfig added %s to %p, comment='%s'\n",
+			getKeyByType(line->type, cfi), entry,
+			line->indent ? line->indent : "");
+	    } else {
+		dbgPrintf("readConfig added %s to %p\n",
+			getKeyByType(line->type, cfi), entry);
+	    }
 
 	    /* we could have seen this outside of an entry... if so, we
 	     * ignore it like any other line we don't grok */
@@ -1406,7 +1413,16 @@ static struct grubConfig * readConfig(const char * inName,
 		cfg->theLines = line;
 	    else
 		last->next = line;
-	    dbgPrintf("readConfig added %s to cfg\n", getKeyByType(line->type, cfi));
+	    if ((line->numElements == 0) && (line->type == LT_WHITESPACE)) {
+		dbgPrintf("readConfig added %s to cfg, comment='%s'\n",
+			getKeyByType(line->type, cfi),
+			line->indent ? line->indent : "");
+	    } else {
+		dbgPrintf("readConfig added %s to cfg ... 0:'%s' 1:'%s'\n",
+		    getKeyByType(line->type, cfi),
+		    (line->numElements > 0) ? line->elements[0].item : "",
+		    (line->numElements > 1) ? line->elements[1].item : "");
+	    }
 	}
 
 	last = line;
@@ -1501,6 +1517,7 @@ static void writeDefault(FILE * out, char * indent,
     struct singleLine * line;
     int i;
 
+    dbgPrintf("writeDefault() entered\n");
     if (!cfg->defaultImage && cfg->flags == GRUB_CONFIG_NO_DEFAULT) return;
 
     if (cfg->defaultImage == DEFAULT_SAVED)
@@ -1556,6 +1573,7 @@ static void writeDefault(FILE * out, char * indent,
             }
 	}
     }
+    dbgPrintf("writeDefault() done\n");
 }
 
 static int writeConfig(struct grubConfig * cfg, char * outName, 
@@ -1568,6 +1586,7 @@ static int writeConfig(struct grubConfig * cfg, char * outName,
     struct stat sb;
     int i;
 
+    dbgPrintf("writeConfig() to outName='%s'\n", outName);
     if (!strcmp(outName, "-")) {
 	out = stdout;
 	tmpOutName = NULL;
@@ -1619,6 +1638,7 @@ static int writeConfig(struct grubConfig * cfg, char * outName,
 
     line = cfg->theLines;
     struct keywordTypes *defaultKw = getKeywordByType(LT_DEFAULT, cfg->cfi);
+    dbgPrintf("writeConfig(): outputting the new config file\n");
     while (line) {
         if (line->type == LT_SET_VARIABLE && defaultKw &&
 		line->numElements == 3 &&
@@ -1648,6 +1668,7 @@ static int writeConfig(struct grubConfig * cfg, char * outName,
     }
 
     if (needs & MAIN_DEFAULT) {
+	dbgPrintf("writeconfig() doing main default\n");
 	writeDefault(out, cfg->primaryIndent, "=", cfg);
 	needs &= ~MAIN_DEFAULT;
     }
@@ -1669,7 +1690,9 @@ static int writeConfig(struct grubConfig * cfg, char * outName,
 	}
     }
 
+    dbgPrintf("writeConfig() done\n");
     if (tmpOutName) {
+	dbgPrintf("writeConfig() renaming '%s' to '%s'\n", tmpOutName, outName);
 	if (rename(tmpOutName, outName)) {
 	    fprintf(stderr, _("grubby: error moving %s to %s: %s\n"),
 		    tmpOutName, outName, strerror(errno));
@@ -1794,6 +1817,26 @@ void printEntry(struct singleEntry * entry, FILE *f) {
     }
 }
 
+#if DEBUG
+void printEntries(struct grubConfig *cfg) {
+    struct singleEntry * entry;
+    int index = 0;
+
+    entry = cfg->entries;
+    while (entry) {
+        if (!entry->skip) {
+	    fprintf(stderr,"-------- entry=%i --------\n", index);
+	    printEntry(entry, stderr);
+	    fprintf(stderr,"-----end entry=%i --------\n", index);
+	    index++;
+	}
+	else
+	    fprintf(stderr,"-----skipping entry %i -----\n", index);
+        entry = entry->next;
+    }
+}
+#endif
+
 void notSuitablePrintf(struct singleEntry * entry, int okay, const char *fmt, ...)
 {
     static int once;
@@ -2935,6 +2978,7 @@ struct singleLine *  addLine(struct singleEntry * entry,
     /* NB: This function shouldn't allocate items on the heap, rather on the
      * stack since it calls addLineTmpl which will make copies.
      */
+    dbgPrintf("addLine(): type=%i 0x%x\n", type, type);
     if (type == LT_TITLE && cfi->titleBracketed) {
 	/* we're doing a bracketed title (zipl) */
 	tmpl.type = type;
@@ -3852,11 +3896,15 @@ static char * getInitrdVal(struct grubConfig * config,
 
     prefixLen = strlen(prefix);
     totalSize = strlen(newKernelInitrd) - prefixLen + 1 /* \0 */;
+    dbgPrintf("getInitrdVal() prefixlen=%i totalsize=%i, newKernelInitrd='%s'\n",
+		(int)prefixLen, (int)totalSize,
+		newKernelInitrd);
 
     for (i = 0; i < extraInitrdCount; i++) {
 	totalSize += sizeof(separatorChar);
 	totalSize += strlen(extraInitrds[i]) - prefixLen;
     }
+    dbgPrintf("... totalSize with extra initrd %i\n", (int)totalSize);
 
     initrdVal = end = malloc(totalSize);
 
@@ -3936,12 +3984,17 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
     if (newDevTreePath && getKeywordByType(LT_DEVTREE, config->cfi))
 	needs |= NEED_DEVTREE;
 
+    dbgPrintf("addNewKernel(): needs=0x%x\n", needs);
     if (template) {
 	for (masterLine = template->lines; 
 	     masterLine && (tmplLine = lineDup(masterLine)); 
 	     lineFree(tmplLine), masterLine = masterLine->next) 
 	{
-	    dbgPrintf("addNewKernel processing %d\n", tmplLine->type);
+	    dbgPrintf("addNewKernel processing %d, 0x%x '%s', needs=0x%x, operand='%s'\n",
+			tmplLine->type, tmplLine->type,
+			tmplLine->numElements ? tmplLine->elements[0].item : "",
+			needs,
+			tmplLine->numElements>1 ? tmplLine->elements[1].item : "");
 
 	    /* skip comments */
 	    chptr = tmplLine->indent;
@@ -3950,6 +4003,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 
 	    if (iskernel(tmplLine->type) && tmplLine->numElements >= 2) {
 		if (!template->multiboot && (needs & NEED_MB)) {
+		    dbgPrintf("addNewKernel: multiboot template\n");
 		    /* it's not a multiboot template and this is the kernel
 		     * line.  Try to be intelligent about inserting the
 		     * hypervisor at the same time.
@@ -3978,17 +4032,22 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 			    free(tmplLine->elements[0].item);
 			    tmplLine->elements[0].item = strdup(mbm_kw->key);
 			}
+			dbgPrintf("addNewKernel processing #1, new kernel path='%s'\n",
+					newKernelPath);
 			newLine = addLineTmpl(new, tmplLine, newLine,
 					      newKernelPath + strlen(prefix), config->cfi);
 			needs &= ~NEED_KERNEL;
 		    }
 		    if (needs & NEED_MB) { /* !mbHyperFirst */
+			dbgPrintf("addNewKernel processing #2\n");
 			newLine = addLine(new, config->cfi, LT_HYPER, 
 					  config->secondaryIndent,
 					  newMBKernel + strlen(prefix));
 			needs &= ~NEED_MB;
 		    }
 		} else if (needs & NEED_KERNEL) {
+		    dbgPrintf("addNewKernel processing #3, new kernel path='%s'\n",
+				newKernelPath);
 		    newLine = addLineTmpl(new, tmplLine, newLine, 
 					  newKernelPath + strlen(prefix), config->cfi);
 		    needs &= ~NEED_KERNEL;
@@ -3999,6 +4058,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 	    } else if (tmplLine->type == LT_HYPER && 
 		       tmplLine->numElements >= 2) {
 		if (needs & NEED_MB) {
+		    dbgPrintf("addNewKernel processing #4 (LT_HYPER)\n");
 		    newLine = addLineTmpl(new, tmplLine, newLine, 
 					  newMBKernel + strlen(prefix), config->cfi);
 		    needs &= ~NEED_MB;
@@ -4008,6 +4068,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 		       tmplLine->numElements >= 2) {
 		if (new->multiboot) {
 		    if (needs & NEED_KERNEL) {
+			dbgPrintf("addNewKernel processing #5\n");
 			newLine = addLineTmpl(new, tmplLine, newLine, 
 					      newKernelPath + 
 					      strlen(prefix), config->cfi);
@@ -4018,6 +4079,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 			initrdVal = getInitrdVal(config, prefix, tmplLine,
 						 newKernelInitrd, extraInitrds,
 						 extraInitrdCount);
+			dbgPrintf("addNewKernel processing #6\n");
 			newLine = addLineTmpl(new, tmplLine, newLine,
 					      initrdVal, config->cfi);
 			free(initrdVal);
@@ -4032,6 +4094,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 		    tmplLine->elements[0].item = 
 			strdup(getKeywordByType(tmplLine->type,
 						config->cfi)->key);
+		    dbgPrintf("addNewKernel processing #7\n");
 		    newLine = addLineTmpl(new, tmplLine, newLine, 
 					  newKernelPath + strlen(prefix),
 					  config->cfi);
@@ -4047,6 +4110,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 			strdup(getKeywordByType(tmplLine->type,
 						config->cfi)->key);
 		    initrdVal = getInitrdVal(config, prefix, tmplLine, newKernelInitrd, extraInitrds, extraInitrdCount);
+		    dbgPrintf("addNewKernel processing #8\n");
 		    newLine = addLineTmpl(new, tmplLine, newLine, initrdVal, config->cfi);
 		    free(initrdVal);
 		    needs &= ~NEED_INITRD;
@@ -4064,6 +4128,8 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 			char *initrdVal;
 	
 			initrdVal = getInitrdVal(config, prefix, tmplLine, newKernelInitrd, extraInitrds, extraInitrdCount);
+			dbgPrintf("addNewKernel processing #9, MBMODULE='%s'\n",
+					initrdVal);
 			newLine = addLine(new, config->cfi, LT_MBMODULE,
 					  config->secondaryIndent, 
 					  initrdVal);
@@ -4073,6 +4139,8 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 		} else if (needs & NEED_INITRD) {
 		    char *initrdVal, *newInitrdVal = NULL;
 		    initrdVal = getInitrdVal(config, prefix, tmplLine, newKernelInitrd, extraInitrds, extraInitrdCount);
+		    dbgPrintf("addNewKernel processing #10, initrdVal='%s', svPrefix='%s'\n",
+				initrdVal, svPrefix ? svPrefix : "");
 		    if (svPrefix) {
 		        newInitrdVal = alloca(strlen(svPrefix) + strlen(initrdVal));
 		        strcpy(newInitrdVal, svPrefix);
@@ -4092,18 +4160,21 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 		strcpy(nkt, "'");
 		strcat(nkt, newKernelTitle);
 		strcat(nkt, "'");
+		dbgPrintf("addNewKernel processing #11, new='%s'\n", nkt);
 		newLine = addLineTmpl(new, tmplLine, newLine, nkt, config->cfi);
 		free(nkt);
 		needs &= ~NEED_TITLE;
 	    } else if (tmplLine->type == LT_TITLE && 
 		       (needs & NEED_TITLE)) {
 		if (tmplLine->numElements >= 2) {
+		    dbgPrintf("addNewKernel processing #12\n");
 		    newLine = addLineTmpl(new, tmplLine, newLine, 
 					  newKernelTitle, config->cfi);
 		    needs &= ~NEED_TITLE;
 		} else if (tmplLine->numElements == 1 &&
 			   config->cfi->titleBracketed) {
 		    /* addLineTmpl doesn't handle titleBracketed */
+		    dbgPrintf("addNewKernel processing #13\n");
 		    newLine = addLine(new, config->cfi, LT_TITLE,
 				      tmplLine->indent, newKernelTitle);
 		    needs &= ~NEED_TITLE;
@@ -4121,6 +4192,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 			strcpy(newTitle, prefix);
 			strcat(newTitle, newKernelTitle);
 			strcat(newTitle, "'");
+			dbgPrintf("addNewKernel processing #14\n");
 			newLine = addLine(new, config->cfi, LT_ECHO,
 					tmplLine->indent, newTitle);
 			free(newTitle);
@@ -4154,6 +4226,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 	/* don't have a template, so start the entry with the 
 	 * appropriate starting line 
 	 */
+	dbgPrintf("addNewKernel processing no template, create something anyway\n");
 	switch (config->cfi->entryStart) {
 	    case LT_KERNEL:
 	    case LT_KERNEL_EFI:
@@ -4225,6 +4298,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 	    removeLine(new, endLine);
 	    needs |= NEED_END;
     }
+    dbgPrintf("addNewKernel(): done loop, needs=0x%x\n", needs);
 
     /* add the remainder of the lines, i.e. those that either
      * weren't present in the template, or in the case of no template,
@@ -4243,6 +4317,7 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
 	needs &= ~NEED_MB;
     }
     if (needs & NEED_KERNEL) {
+	dbgPrintf("addNewKernel processing #15\n");
 	newLine = addLine(new, config->cfi, 
 			  (new->multiboot && getKeywordByType(LT_MBMODULE, 
 							      config->cfi))
@@ -4293,6 +4368,12 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
     if (updateImage(config, "0", prefix, newKernelArgs, NULL, 
                     newMBKernelArgs, NULL)) return 1;
 
+#if DEBUG
+    fprintf(stderr,"--end of addNewKernel()-----\n");
+    printEntry(new, stderr);
+    fprintf(stderr,"--end of addNewKernel()-----\n");
+#endif
+
     return 0;
 }
 
@@ -4467,6 +4548,7 @@ int main(int argc, const char ** argv) {
 	strncat(saved_command_line, j == argc -1 ? "" : " ", 1);
     }
 
+    dbgPrintf("---> Begin grubby execution <------------------------------------\n");
     optCon = poptGetContext("grubby", argc, argv, options, 0);
     poptReadDefaultConfig(optCon, 1);
 
@@ -4815,6 +4897,9 @@ int main(int argc, const char ** argv) {
                           "Not writing out new config.\n"));
         return 1;
     }
+#if DEBUG
+    printEntries(config);
+#endif
 
     if (!outputFile)
 	outputFile = (char *)grubConfig;
-- 
1.9.3



More information about the anaconda-patches mailing list