xref: /aosp_15_r20/external/pdfium/third_party/libopenjpeg/event.c (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker /*
2*3ac0a46fSAndroid Build Coastguard Worker  * The copyright in this software is being made available under the 2-clauses
3*3ac0a46fSAndroid Build Coastguard Worker  * BSD License, included below. This software may be subject to other third
4*3ac0a46fSAndroid Build Coastguard Worker  * party and contributor rights, including patent rights, and no such rights
5*3ac0a46fSAndroid Build Coastguard Worker  * are granted under this license.
6*3ac0a46fSAndroid Build Coastguard Worker  *
7*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2005, Herve Drolon, FreeImage Team
8*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
9*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2012, CS Systemes d'Information, France
10*3ac0a46fSAndroid Build Coastguard Worker  * All rights reserved.
11*3ac0a46fSAndroid Build Coastguard Worker  *
12*3ac0a46fSAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
13*3ac0a46fSAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
14*3ac0a46fSAndroid Build Coastguard Worker  * are met:
15*3ac0a46fSAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
16*3ac0a46fSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
17*3ac0a46fSAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
18*3ac0a46fSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
19*3ac0a46fSAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
20*3ac0a46fSAndroid Build Coastguard Worker  *
21*3ac0a46fSAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
22*3ac0a46fSAndroid Build Coastguard Worker  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23*3ac0a46fSAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24*3ac0a46fSAndroid Build Coastguard Worker  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25*3ac0a46fSAndroid Build Coastguard Worker  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26*3ac0a46fSAndroid Build Coastguard Worker  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27*3ac0a46fSAndroid Build Coastguard Worker  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28*3ac0a46fSAndroid Build Coastguard Worker  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29*3ac0a46fSAndroid Build Coastguard Worker  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30*3ac0a46fSAndroid Build Coastguard Worker  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31*3ac0a46fSAndroid Build Coastguard Worker  * POSSIBILITY OF SUCH DAMAGE.
32*3ac0a46fSAndroid Build Coastguard Worker  */
33*3ac0a46fSAndroid Build Coastguard Worker 
34*3ac0a46fSAndroid Build Coastguard Worker #include "opj_includes.h"
35*3ac0a46fSAndroid Build Coastguard Worker 
36*3ac0a46fSAndroid Build Coastguard Worker /* ==========================================================
37*3ac0a46fSAndroid Build Coastguard Worker      Utility functions
38*3ac0a46fSAndroid Build Coastguard Worker    ==========================================================*/
39*3ac0a46fSAndroid Build Coastguard Worker 
40*3ac0a46fSAndroid Build Coastguard Worker #ifdef OPJ_CODE_NOT_USED
41*3ac0a46fSAndroid Build Coastguard Worker #ifndef _WIN32
42*3ac0a46fSAndroid Build Coastguard Worker static char*
i2a(unsigned i,char * a,unsigned r)43*3ac0a46fSAndroid Build Coastguard Worker i2a(unsigned i, char *a, unsigned r)
44*3ac0a46fSAndroid Build Coastguard Worker {
45*3ac0a46fSAndroid Build Coastguard Worker     if (i / r > 0) {
46*3ac0a46fSAndroid Build Coastguard Worker         a = i2a(i / r, a, r);
47*3ac0a46fSAndroid Build Coastguard Worker     }
48*3ac0a46fSAndroid Build Coastguard Worker     *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
49*3ac0a46fSAndroid Build Coastguard Worker     return a + 1;
50*3ac0a46fSAndroid Build Coastguard Worker }
51*3ac0a46fSAndroid Build Coastguard Worker 
52*3ac0a46fSAndroid Build Coastguard Worker /**
53*3ac0a46fSAndroid Build Coastguard Worker  Transforms integer i into an ascii string and stores the result in a;
54*3ac0a46fSAndroid Build Coastguard Worker  string is encoded in the base indicated by r.
55*3ac0a46fSAndroid Build Coastguard Worker  @param i Number to be converted
56*3ac0a46fSAndroid Build Coastguard Worker  @param a String result
57*3ac0a46fSAndroid Build Coastguard Worker  @param r Base of value; must be in the range 2 - 36
58*3ac0a46fSAndroid Build Coastguard Worker  @return Returns a
59*3ac0a46fSAndroid Build Coastguard Worker */
60*3ac0a46fSAndroid Build Coastguard Worker static char *
_itoa(int i,char * a,int r)61*3ac0a46fSAndroid Build Coastguard Worker _itoa(int i, char *a, int r)
62*3ac0a46fSAndroid Build Coastguard Worker {
63*3ac0a46fSAndroid Build Coastguard Worker     r = ((r < 2) || (r > 36)) ? 10 : r;
64*3ac0a46fSAndroid Build Coastguard Worker     if (i < 0) {
65*3ac0a46fSAndroid Build Coastguard Worker         *a = '-';
66*3ac0a46fSAndroid Build Coastguard Worker         *i2a(-i, a + 1, r) = 0;
67*3ac0a46fSAndroid Build Coastguard Worker     } else {
68*3ac0a46fSAndroid Build Coastguard Worker         *i2a(i, a, r) = 0;
69*3ac0a46fSAndroid Build Coastguard Worker     }
70*3ac0a46fSAndroid Build Coastguard Worker     return a;
71*3ac0a46fSAndroid Build Coastguard Worker }
72*3ac0a46fSAndroid Build Coastguard Worker 
73*3ac0a46fSAndroid Build Coastguard Worker #endif /* !_WIN32 */
74*3ac0a46fSAndroid Build Coastguard Worker #endif
75*3ac0a46fSAndroid Build Coastguard Worker 
76*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */
77*3ac0a46fSAndroid Build Coastguard Worker /**
78*3ac0a46fSAndroid Build Coastguard Worker  * Default callback function.
79*3ac0a46fSAndroid Build Coastguard Worker  * Do nothing.
80*3ac0a46fSAndroid Build Coastguard Worker  */
opj_default_callback(const char * msg,void * client_data)81*3ac0a46fSAndroid Build Coastguard Worker static void opj_default_callback(const char *msg, void *client_data)
82*3ac0a46fSAndroid Build Coastguard Worker {
83*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(msg);
84*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(client_data);
85*3ac0a46fSAndroid Build Coastguard Worker }
86*3ac0a46fSAndroid Build Coastguard Worker 
87*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */
88*3ac0a46fSAndroid Build Coastguard Worker 
89*3ac0a46fSAndroid Build Coastguard Worker 
90*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */
opj_event_msg(opj_event_mgr_t * p_event_mgr,OPJ_INT32 event_type,const char * fmt,...)91*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_event_msg(opj_event_mgr_t* p_event_mgr, OPJ_INT32 event_type,
92*3ac0a46fSAndroid Build Coastguard Worker                        const char *fmt, ...)
93*3ac0a46fSAndroid Build Coastguard Worker {
94*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
95*3ac0a46fSAndroid Build Coastguard Worker     opj_msg_callback msg_handler = 00;
96*3ac0a46fSAndroid Build Coastguard Worker     void * l_data = 00;
97*3ac0a46fSAndroid Build Coastguard Worker 
98*3ac0a46fSAndroid Build Coastguard Worker     if (p_event_mgr != 00) {
99*3ac0a46fSAndroid Build Coastguard Worker         switch (event_type) {
100*3ac0a46fSAndroid Build Coastguard Worker         case EVT_ERROR:
101*3ac0a46fSAndroid Build Coastguard Worker             msg_handler = p_event_mgr->error_handler;
102*3ac0a46fSAndroid Build Coastguard Worker             l_data = p_event_mgr->m_error_data;
103*3ac0a46fSAndroid Build Coastguard Worker             break;
104*3ac0a46fSAndroid Build Coastguard Worker         case EVT_WARNING:
105*3ac0a46fSAndroid Build Coastguard Worker             msg_handler = p_event_mgr->warning_handler;
106*3ac0a46fSAndroid Build Coastguard Worker             l_data = p_event_mgr->m_warning_data;
107*3ac0a46fSAndroid Build Coastguard Worker             break;
108*3ac0a46fSAndroid Build Coastguard Worker         case EVT_INFO:
109*3ac0a46fSAndroid Build Coastguard Worker             msg_handler = p_event_mgr->info_handler;
110*3ac0a46fSAndroid Build Coastguard Worker             l_data = p_event_mgr->m_info_data;
111*3ac0a46fSAndroid Build Coastguard Worker             break;
112*3ac0a46fSAndroid Build Coastguard Worker         default:
113*3ac0a46fSAndroid Build Coastguard Worker             break;
114*3ac0a46fSAndroid Build Coastguard Worker         }
115*3ac0a46fSAndroid Build Coastguard Worker         if (msg_handler == 00) {
116*3ac0a46fSAndroid Build Coastguard Worker             return OPJ_FALSE;
117*3ac0a46fSAndroid Build Coastguard Worker         }
118*3ac0a46fSAndroid Build Coastguard Worker     } else {
119*3ac0a46fSAndroid Build Coastguard Worker         return OPJ_FALSE;
120*3ac0a46fSAndroid Build Coastguard Worker     }
121*3ac0a46fSAndroid Build Coastguard Worker 
122*3ac0a46fSAndroid Build Coastguard Worker     if ((fmt != 00) && (p_event_mgr != 00)) {
123*3ac0a46fSAndroid Build Coastguard Worker         va_list arg;
124*3ac0a46fSAndroid Build Coastguard Worker         char message[OPJ_MSG_SIZE];
125*3ac0a46fSAndroid Build Coastguard Worker         memset(message, 0, OPJ_MSG_SIZE);
126*3ac0a46fSAndroid Build Coastguard Worker         /* initialize the optional parameter list */
127*3ac0a46fSAndroid Build Coastguard Worker         va_start(arg, fmt);
128*3ac0a46fSAndroid Build Coastguard Worker         /* parse the format string and put the result in 'message' */
129*3ac0a46fSAndroid Build Coastguard Worker         vsnprintf(message, OPJ_MSG_SIZE, fmt, arg);
130*3ac0a46fSAndroid Build Coastguard Worker         /* force zero termination for Windows _vsnprintf() of old MSVC */
131*3ac0a46fSAndroid Build Coastguard Worker         message[OPJ_MSG_SIZE - 1] = '\0';
132*3ac0a46fSAndroid Build Coastguard Worker         /* deinitialize the optional parameter list */
133*3ac0a46fSAndroid Build Coastguard Worker         va_end(arg);
134*3ac0a46fSAndroid Build Coastguard Worker 
135*3ac0a46fSAndroid Build Coastguard Worker         /* output the message to the user program */
136*3ac0a46fSAndroid Build Coastguard Worker         msg_handler(message, l_data);
137*3ac0a46fSAndroid Build Coastguard Worker     }
138*3ac0a46fSAndroid Build Coastguard Worker 
139*3ac0a46fSAndroid Build Coastguard Worker     return OPJ_TRUE;
140*3ac0a46fSAndroid Build Coastguard Worker }
141*3ac0a46fSAndroid Build Coastguard Worker 
opj_set_default_event_handler(opj_event_mgr_t * p_manager)142*3ac0a46fSAndroid Build Coastguard Worker void opj_set_default_event_handler(opj_event_mgr_t * p_manager)
143*3ac0a46fSAndroid Build Coastguard Worker {
144*3ac0a46fSAndroid Build Coastguard Worker     p_manager->m_error_data = 00;
145*3ac0a46fSAndroid Build Coastguard Worker     p_manager->m_warning_data = 00;
146*3ac0a46fSAndroid Build Coastguard Worker     p_manager->m_info_data = 00;
147*3ac0a46fSAndroid Build Coastguard Worker     p_manager->error_handler = opj_default_callback;
148*3ac0a46fSAndroid Build Coastguard Worker     p_manager->info_handler = opj_default_callback;
149*3ac0a46fSAndroid Build Coastguard Worker     p_manager->warning_handler = opj_default_callback;
150*3ac0a46fSAndroid Build Coastguard Worker }
151*3ac0a46fSAndroid Build Coastguard Worker 
152