126{
127 div_t res;
128 int days_in_feb = 28;
129
130#pragma GCC diagnostic push
131#if defined(__clang__)
132#elif defined(__GNUC__)
133
134#pragma GCC diagnostic ignored "-Waggregate-return"
135#endif
136
137 if (tim_p->tm_sec < 0 || tim_p->tm_sec > 59)
138 {
139 res = div (tim_p->tm_sec, 60);
140 tim_p->tm_min += res.quot;
141 if ((tim_p->tm_sec = res.rem) < 0)
142 {
143 tim_p->tm_sec += 60;
144 --tim_p->tm_min;
145 }
146 }
147
148 if (tim_p->tm_min < 0 || tim_p->tm_min > 59)
149 {
150 res = div (tim_p->tm_min, 60);
151 tim_p->tm_hour += res.quot;
152 if ((tim_p->tm_min = res.rem) < 0)
153 {
154 tim_p->tm_min += 60;
155 --tim_p->tm_hour;
156 }
157 }
158
159 if (tim_p->tm_hour < 0 || tim_p->tm_hour > 23)
160 {
161 res = div (tim_p->tm_hour, 24);
162 tim_p->tm_mday += res.quot;
163 if ((tim_p->tm_hour = res.rem) < 0)
164 {
165 tim_p->tm_hour += 24;
166 --tim_p->tm_mday;
167 }
168 }
169
170 if (tim_p->tm_mon < 0 || tim_p->tm_mon > 11)
171 {
172 res = div (tim_p->tm_mon, 12);
173 tim_p->tm_year += res.quot;
174 if ((tim_p->tm_mon = res.rem) < 0)
175 {
176 tim_p->tm_mon += 12;
177 --tim_p->tm_year;
178 }
179 }
180#pragma GCC diagnostic pop
181
183 days_in_feb = 29;
184
185#pragma GCC diagnostic push
186#if defined(__clang__)
187#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
188#endif
189 if (tim_p->tm_mday <= 0)
190 {
191 while (tim_p->tm_mday <= 0)
192 {
193 if (--tim_p->tm_mon == -1)
194 {
195 tim_p->tm_year--;
196 tim_p->tm_mon = 11;
197 days_in_feb
199 }
201 }
202 }
203 else
204 {
206 {
208 if (++tim_p->tm_mon == 12)
209 {
210 tim_p->tm_year++;
211 tim_p->tm_mon = 0;
212 days_in_feb
214 }
215 }
216 }
217#pragma GCC diagnostic pop
218}
#define _DAYS_IN_MONTH(x)