18bd6d9a1c60db6cf70c8e9876bb3b8249908ce9bPhillip Lougher#ifndef ERROR_H
28bd6d9a1c60db6cf70c8e9876bb3b8249908ce9bPhillip Lougher#define ERROR_H
32477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher/*
42477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * Create a squashfs filesystem.  This is a highly compressed read only
52477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * filesystem.
62477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher *
785776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher * Copyright (c) 2012, 2013, 2014
883d42a3fc898962aa1f1e8387f2ccb1114e0d294Phillip Lougher * Phillip Lougher <phillip@squashfs.org.uk>
92477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher *
102477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * This program is free software; you can redistribute it and/or
112477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * modify it under the terms of the GNU General Public License
122477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * as published by the Free Software Foundation; either version 2,
132477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * or (at your option) any later version.
142477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher *
152477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * This program is distributed in the hope that it will be useful,
162477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * but WITHOUT ANY WARRANTY; without even the implied warranty of
172477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
182477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * GNU General Public License for more details.
192477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher *
202477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * You should have received a copy of the GNU General Public License
212477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * along with this program; if not, write to the Free Software
222477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
232477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher *
242477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher * error.h
252477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher */
262477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher
2785776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougherextern int exit_on_error;
2885776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher
299b7c3c2fa85f7002ca5a5335ab7c3dab4b136573Phillip Lougherextern void prep_exit();
309a0e8bb0899e0971fe1d81b7d8b83d2a21701b2bPhillip Lougherextern void progressbar_error(char *fmt, ...);
319a0e8bb0899e0971fe1d81b7d8b83d2a21701b2bPhillip Lougherextern void progressbar_info(char *fmt, ...);
322477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher
332477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher#ifdef SQUASHFS_TRACE
342477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher#define TRACE(s, args...) \
352477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		do { \
360100fed4ec712daba9a0009c47f6e8390da5bd93Phillip Lougher			progressbar_info("squashfs: "s, ## args);\
372477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		} while(0)
382477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher#else
392477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher#define TRACE(s, args...)
402477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher#endif
412477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher
422477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher#define INFO(s, args...) \
432477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		do {\
442477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher			 if(!silent)\
4524551a8a473d7edb1835eb0f7dcf6e07e3a9d2e1Phillip Lougher				progressbar_info(s, ## args);\
462477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		} while(0)
472477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher
482477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher#define ERROR(s, args...) \
492477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		do {\
502477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher			progressbar_error(s, ## args); \
512477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		} while(0)
522477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher
5385776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher#define ERROR_START(s, args...) \
5485776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher		do { \
5585776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher			disable_progress_bar(); \
5685776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher			fprintf(stderr, s, ## args); \
5785776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher		} while(0)
5885776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher
5985776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher#define ERROR_EXIT(s, args...) \
6085776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher		do {\
6185776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher			if (exit_on_error) { \
6285776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher				fprintf(stderr, "\n"); \
6385776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher				EXIT_MKSQUASHFS(); \
6485776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher			} else { \
6585776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher				fprintf(stderr, s, ## args); \
6685776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher				enable_progress_bar(); \
6785776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher			} \
6885776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher		} while(0)
6985776df7ba8c5a0bb56ddccfff2bf6a0fc48cac8Phillip Lougher
702477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher#define EXIT_MKSQUASHFS() \
712477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		do {\
729b7c3c2fa85f7002ca5a5335ab7c3dab4b136573Phillip Lougher			prep_exit();\
732477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher			exit(1);\
742477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		} while(0)
752477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher
762477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher#define BAD_ERROR(s, args...) \
772477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		do {\
782477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher			progressbar_error("FATAL ERROR:" s, ##args); \
792477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher			EXIT_MKSQUASHFS();\
802477d0defc9d6dade582bb36596eed2e3cfddf8cPhillip Lougher		} while(0)
814483d965675a0d6bf424b36e8da85c3300de2413Phillip Lougher
820100fed4ec712daba9a0009c47f6e8390da5bd93Phillip Lougher#define EXIT_UNSQUASH(s, args...) BAD_ERROR(s, ##args)
830100fed4ec712daba9a0009c47f6e8390da5bd93Phillip Lougher
844483d965675a0d6bf424b36e8da85c3300de2413Phillip Lougher#define MEM_ERROR() \
854483d965675a0d6bf424b36e8da85c3300de2413Phillip Lougher	do {\
864483d965675a0d6bf424b36e8da85c3300de2413Phillip Lougher		progressbar_error("FATAL ERROR: Out of memory (%s)\n", \
874483d965675a0d6bf424b36e8da85c3300de2413Phillip Lougher								__func__); \
884483d965675a0d6bf424b36e8da85c3300de2413Phillip Lougher		EXIT_MKSQUASHFS();\
894483d965675a0d6bf424b36e8da85c3300de2413Phillip Lougher	} while(0)
908bd6d9a1c60db6cf70c8e9876bb3b8249908ce9bPhillip Lougher#endif
91