mutt stable branch with some hacks
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

folder_file: remove struct stat

Add and use new flag to indicate the folder is on local filesystem.
Add and use new gid, uid and nlink member.
Use existing ->mode member instead of stat->st_mode.
Use existing ->size member instead of stat->st_size.
Use existing ->mtime member instead of stat->st_mtime.
Remove struct stat, the used values were already duplicated in the struct.
This reduces memory usage.

+37 -31
+33 -30
browser.c
··· 68 68 { 69 69 FREE (&((state->entry)[c].name)); 70 70 FREE (&((state->entry)[c].desc)); 71 - FREE (&((state->entry)[c].st)); 72 71 } 73 72 #ifdef USE_IMAP 74 73 FREE (&state->folder); ··· 163 162 164 163 case 'd': 165 164 case 'D': 166 - if (folder->ff->st != NULL) 165 + if (folder->ff->local) 167 166 { 168 167 int do_locales = TRUE; 169 168 ··· 175 174 } 176 175 } else { 177 176 tnow = time (NULL); 178 - t_fmt = tnow - folder->ff->st->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y"; 177 + t_fmt = tnow - folder->ff->mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y"; 179 178 } 180 179 if (do_locales) 181 180 setlocale(LC_TIME, NONULL (Locale)); /* use environment if $locale is not set */ 182 181 else 183 182 setlocale(LC_TIME, "C"); 184 - strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->st->st_mtime)); 183 + strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->mtime)); 185 184 186 185 mutt_format_s (dest, destlen, fmt, date); 187 186 } ··· 200 199 s = NONULL (folder->ff->name); 201 200 202 201 snprintf (fn, sizeof (fn), "%s%s", s, 203 - folder->ff->st ? (S_ISLNK (folder->ff->st->st_mode) ? "@" : 204 - (S_ISDIR (folder->ff->st->st_mode) ? "/" : 205 - ((folder->ff->st->st_mode & S_IXUSR) != 0 ? "*" : ""))) : ""); 202 + folder->ff->local ? (S_ISLNK (folder->ff->mode) ? "@" : 203 + (S_ISDIR (folder->ff->mode) ? "/" : 204 + ((folder->ff->mode & S_IXUSR) != 0 ? "*" : ""))) : ""); 206 205 207 206 mutt_format_s (dest, destlen, fmt, fn); 208 207 break; 209 208 } 210 209 case 'F': 211 - if (folder->ff->st != NULL) 210 + if (folder->ff->local) 212 211 { 213 212 snprintf (permission, sizeof (permission), "%c%c%c%c%c%c%c%c%c%c", 214 - S_ISDIR(folder->ff->st->st_mode) ? 'd' : (S_ISLNK(folder->ff->st->st_mode) ? 'l' : '-'), 215 - (folder->ff->st->st_mode & S_IRUSR) != 0 ? 'r': '-', 216 - (folder->ff->st->st_mode & S_IWUSR) != 0 ? 'w' : '-', 217 - (folder->ff->st->st_mode & S_ISUID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXUSR) != 0 ? 'x': '-', 218 - (folder->ff->st->st_mode & S_IRGRP) != 0 ? 'r' : '-', 219 - (folder->ff->st->st_mode & S_IWGRP) != 0 ? 'w' : '-', 220 - (folder->ff->st->st_mode & S_ISGID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXGRP) != 0 ? 'x': '-', 221 - (folder->ff->st->st_mode & S_IROTH) != 0 ? 'r' : '-', 222 - (folder->ff->st->st_mode & S_IWOTH) != 0 ? 'w' : '-', 223 - (folder->ff->st->st_mode & S_ISVTX) != 0 ? 't' : (folder->ff->st->st_mode & S_IXOTH) != 0 ? 'x': '-'); 213 + S_ISDIR(folder->ff->mode) ? 'd' : (S_ISLNK(folder->ff->mode) ? 'l' : '-'), 214 + (folder->ff->mode & S_IRUSR) != 0 ? 'r': '-', 215 + (folder->ff->mode & S_IWUSR) != 0 ? 'w' : '-', 216 + (folder->ff->mode & S_ISUID) != 0 ? 's' : (folder->ff->mode & S_IXUSR) != 0 ? 'x': '-', 217 + (folder->ff->mode & S_IRGRP) != 0 ? 'r' : '-', 218 + (folder->ff->mode & S_IWGRP) != 0 ? 'w' : '-', 219 + (folder->ff->mode & S_ISGID) != 0 ? 's' : (folder->ff->mode & S_IXGRP) != 0 ? 'x': '-', 220 + (folder->ff->mode & S_IROTH) != 0 ? 'r' : '-', 221 + (folder->ff->mode & S_IWOTH) != 0 ? 'w' : '-', 222 + (folder->ff->mode & S_ISVTX) != 0 ? 't' : (folder->ff->mode & S_IXOTH) != 0 ? 'x': '-'); 224 223 mutt_format_s (dest, destlen, fmt, permission); 225 224 } 226 225 #ifdef USE_IMAP ··· 237 236 break; 238 237 239 238 case 'g': 240 - if (folder->ff->st != NULL) 239 + if (folder->ff->local) 241 240 { 242 - if ((gr = getgrgid (folder->ff->st->st_gid))) 241 + if ((gr = getgrgid (folder->ff->gid))) 243 242 mutt_format_s (dest, destlen, fmt, gr->gr_name); 244 243 else 245 244 { 246 245 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 247 - snprintf (dest, destlen, tmp, folder->ff->st->st_gid); 246 + snprintf (dest, destlen, tmp, folder->ff->gid); 248 247 } 249 248 } 250 249 else ··· 252 251 break; 253 252 254 253 case 'l': 255 - if (folder->ff->st != NULL) 254 + if (folder->ff->local) 256 255 { 257 256 snprintf (tmp, sizeof (tmp), "%%%sd", fmt); 258 - snprintf (dest, destlen, tmp, folder->ff->st->st_nlink); 257 + snprintf (dest, destlen, tmp, folder->ff->nlink); 259 258 } 260 259 else 261 260 mutt_format_s (dest, destlen, fmt, ""); ··· 280 279 break; 281 280 282 281 case 's': 283 - if (folder->ff->st != NULL) 282 + if (folder->ff->local) 284 283 { 285 - mutt_pretty_size(fn, sizeof(fn), folder->ff->st->st_size); 284 + mutt_pretty_size(fn, sizeof(fn), folder->ff->size); 286 285 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 287 286 snprintf (dest, destlen, tmp, fn); 288 287 } ··· 296 295 break; 297 296 298 297 case 'u': 299 - if (folder->ff->st != NULL) 298 + if (folder->ff->local) 300 299 { 301 - if ((pw = getpwuid (folder->ff->st->st_uid))) 300 + if ((pw = getpwuid (folder->ff->uid))) 302 301 mutt_format_s (dest, destlen, fmt, pw->pw_name); 303 302 else 304 303 { 305 304 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 306 - snprintf (dest, destlen, tmp, folder->ff->st->st_uid); 305 + snprintf (dest, destlen, tmp, folder->ff->uid); 307 306 } 308 307 } 309 308 else ··· 343 342 (state->entry)[state->entrylen].mode = s->st_mode; 344 343 (state->entry)[state->entrylen].mtime = s->st_mtime; 345 344 (state->entry)[state->entrylen].size = s->st_size; 345 + (state->entry)[state->entrylen].gid = s->st_gid; 346 + (state->entry)[state->entrylen].uid = s->st_uid; 347 + (state->entry)[state->entrylen].nlink = s->st_nlink; 346 348 347 - (state->entry)[state->entrylen].st = safe_malloc (sizeof (struct stat)); 348 - memcpy ((state->entry)[state->entrylen].st, s, sizeof (struct stat)); 349 + (state->entry)[state->entrylen].local = 1; 349 350 } 351 + else 352 + (state->entry)[state->entrylen].local = 0; 350 353 351 354 (state->entry)[state->entrylen].new = new; 352 355 (state->entry)[state->entrylen].name = safe_strdup (name);
+4 -1
browser.h
··· 24 24 mode_t mode; 25 25 off_t size; 26 26 time_t mtime; 27 - struct stat *st; 27 + uid_t uid; 28 + gid_t gid; 29 + nlink_t nlink; 28 30 29 31 char *name; 30 32 char *desc; ··· 37 39 unsigned selectable : 1; 38 40 unsigned inferiors : 1; 39 41 #endif 42 + unsigned local : 1; /* folder is on local filesystem */ 40 43 unsigned tagged : 1; 41 44 }; 42 45