Changeset 1205:df3a6ad8d9d5 for browser.c
Legend:
- Unmodified
- Added
- Removed
-
browser.c
r1169 r1205 48 48 typedef struct folder_t 49 49 { 50 const char *name; 51 const struct stat *f; 52 int new; 50 struct folder_file *ff; 51 int num; 53 52 } FOLDER; 54 53 … … 64 63 safe_free ((void **) &((state->entry)[c].name)); 65 64 safe_free ((void **) &((state->entry)[c].desc)); 65 safe_free ((void **) &((state->entry)[c].st)); 66 66 } 67 67 #ifdef USE_IMAP … … 147 147 switch (op) 148 148 { 149 case 'C': 150 snprintf (tmp, sizeof (tmp), "%%%sd", fmt); 151 snprintf (dest, destlen, tmp, folder->num + 1); 152 break; 153 149 154 case 'd': 150 if (folder->f != NULL)155 if (folder->ff->st != NULL) 151 156 { 152 157 tnow = time (NULL); 153 t_fmt = tnow - folder->f ->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y";154 strftime (date, sizeof (date), t_fmt, localtime (&folder->f ->st_mtime));158 t_fmt = tnow - folder->ff->st->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y"; 159 strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->st->st_mtime)); 155 160 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 156 161 snprintf (dest, destlen, tmp, date); … … 162 167 } 163 168 break; 169 164 170 case 'f': 165 strfcpy (fn, folder-> name, sizeof(fn));166 if (folder->f != NULL)167 { 168 strcat (fn, S_ISLNK (folder->f ->st_mode) ? "@" :169 (S_ISDIR (folder->f ->st_mode) ? "/" :170 ((folder->f ->st_mode & S_IXUSR) != 0 ? "*" : "")));171 strfcpy (fn, folder->ff->name, sizeof(fn)); 172 if (folder->ff->st != NULL) 173 { 174 strcat (fn, S_ISLNK (folder->ff->st->st_mode) ? "@" : 175 (S_ISDIR (folder->ff->st->st_mode) ? "/" : 176 ((folder->ff->st->st_mode & S_IXUSR) != 0 ? "*" : ""))); 171 177 } 172 178 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 173 179 snprintf (dest, destlen, tmp, fn); 174 180 break; 181 175 182 case 'F': 176 if (folder->f != NULL)183 if (folder->ff->st != NULL) 177 184 { 178 185 sprintf (permission, "%c%c%c%c%c%c%c%c%c%c", 179 S_ISDIR(folder->f->st_mode) ? 'd' : (S_ISLNK(folder->f->st_mode) ? 'l' : '-'),180 (folder->f->st_mode & S_IRUSR) != 0 ? 'r': '-',181 (folder->f->st_mode & S_IWUSR) != 0 ? 'w' : '-',182 (folder->f->st_mode & S_ISUID) != 0 ? 's' : (folder->f->st_mode & S_IXUSR) != 0 ? 'x': '-',183 (folder->f->st_mode & S_IRGRP) != 0 ? 'r' : '-',184 (folder->f->st_mode & S_IWGRP) != 0 ? 'w' : '-',185 (folder->f->st_mode & S_ISGID) != 0 ? 's' : (folder->f->st_mode & S_IXGRP) != 0 ? 'x': '-',186 (folder->f->st_mode & S_IROTH) != 0 ? 'r' : '-',187 (folder->f->st_mode & S_IWOTH) != 0 ? 'w' : '-',188 (folder->f->st_mode & S_ISVTX) != 0 ? 't' : (folder->f->st_mode & S_IXOTH) != 0 ? 'x': '-');186 S_ISDIR(folder->ff->st->st_mode) ? 'd' : (S_ISLNK(folder->ff->st->st_mode) ? 'l' : '-'), 187 (folder->ff->st->st_mode & S_IRUSR) != 0 ? 'r': '-', 188 (folder->ff->st->st_mode & S_IWUSR) != 0 ? 'w' : '-', 189 (folder->ff->st->st_mode & S_ISUID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXUSR) != 0 ? 'x': '-', 190 (folder->ff->st->st_mode & S_IRGRP) != 0 ? 'r' : '-', 191 (folder->ff->st->st_mode & S_IWGRP) != 0 ? 'w' : '-', 192 (folder->ff->st->st_mode & S_ISGID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXGRP) != 0 ? 'x': '-', 193 (folder->ff->st->st_mode & S_IROTH) != 0 ? 'r' : '-', 194 (folder->ff->st->st_mode & S_IWOTH) != 0 ? 'w' : '-', 195 (folder->ff->st->st_mode & S_ISVTX) != 0 ? 't' : (folder->ff->st->st_mode & S_IXOTH) != 0 ? 'x': '-'); 189 196 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 190 197 snprintf (dest, destlen, tmp, permission); … … 193 200 { 194 201 #ifdef USE_IMAP 195 if (strchr(folder-> name, '{'))202 if (strchr(folder->ff->name, '{')) 196 203 { 197 204 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); … … 201 208 } 202 209 break; 210 203 211 case 'g': 204 if (folder->f != NULL)205 { 206 if ((gr = getgrgid (folder->f ->st_gid)))212 if (folder->ff->st != NULL) 213 { 214 if ((gr = getgrgid (folder->ff->st->st_gid))) 207 215 { 208 216 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); … … 212 220 { 213 221 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 214 snprintf (dest, destlen, tmp, folder->f ->st_gid);222 snprintf (dest, destlen, tmp, folder->ff->st->st_gid); 215 223 } 216 224 } … … 221 229 } 222 230 break; 231 223 232 case 'l': 224 if (folder->f != NULL)233 if (folder->ff->st != NULL) 225 234 { 226 235 snprintf (tmp, sizeof (tmp), "%%%sd", fmt); 227 snprintf (dest, destlen, tmp, folder->f ->st_nlink);236 snprintf (dest, destlen, tmp, folder->ff->st->st_nlink); 228 237 } 229 238 else … … 233 242 } 234 243 break; 244 235 245 case 'N': 236 246 snprintf (tmp, sizeof (tmp), "%%%sc", fmt); 237 snprintf (dest, destlen, tmp, folder->new ? 'N' : ' '); 238 break; 247 snprintf (dest, destlen, tmp, folder->ff->is_new ? 'N' : ' '); 248 break; 249 239 250 case 's': 240 if (folder->f != NULL)251 if (folder->ff->st != NULL) 241 252 { 242 253 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 243 snprintf (dest, destlen, tmp, (long) folder->f ->st_size);254 snprintf (dest, destlen, tmp, (long) folder->ff->st->st_size); 244 255 } 245 256 else … … 249 260 } 250 261 break; 262 263 case 't': 264 snprintf (tmp, sizeof (tmp), "%%%sc", fmt); 265 snprintf (dest, destlen, tmp, folder->ff->tagged ? '*' : ' '); 266 break; 267 251 268 case 'u': 252 if (folder->f != NULL)253 { 254 if ((pw = getpwuid (folder->f ->st_uid)))269 if (folder->ff->st != NULL) 270 { 271 if ((pw = getpwuid (folder->ff->st->st_uid))) 255 272 { 256 273 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); … … 260 277 { 261 278 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 262 snprintf (dest, destlen, tmp, folder->f ->st_uid);279 snprintf (dest, destlen, tmp, folder->ff->st->st_uid); 263 280 } 264 281 } … … 269 286 } 270 287 break; 288 289 default: 290 snprintf (tmp, sizeof (tmp), "%%%sc", fmt); 291 snprintf (dest, destlen, tmp, op); 292 break; 271 293 } 272 294 return (src); … … 277 299 { 278 300 char buffer[_POSIX_PATH_MAX + SHORT_STRING]; 279 FOLDER folder;280 281 folder.name = name;282 folder.f = s;283 folder.new = new;284 mutt_FormatString (buffer, sizeof (buffer), NONULL(FolderFormat),285 folder_format_str, (unsigned long) &folder,286 M_FORMAT_ARROWCURSOR);287 301 288 302 if (state->entrylen == state->entrymax) … … 297 311 if (s != NULL) 298 312 { 299 (state->entry)[state->entrylen].mode = s->st_mode; 300 (state->entry)[state->entrylen].mtime = s->st_mtime; 301 (state->entry)[state->entrylen].size = s->st_size; 302 } 313 (state->entry)[state->entrylen].mode = s->st_mode; 314 (state->entry)[state->entrylen].mtime = s->st_mtime; 315 (state->entry)[state->entrylen].size = s->st_size; 316 317 (state->entry)[state->entrylen].st = safe_malloc (sizeof (struct stat)); 318 memcpy ((state->entry)[state->entrylen].st, s, sizeof (struct stat)); 319 } 320 321 (state->entry)[state->entrylen].is_new = new; 303 322 (state->entry)[state->entrylen].name = safe_strdup (name); 304 323 (state->entry)[state->entrylen].desc = safe_strdup (buffer); … … 424 443 void folder_entry (char *s, size_t slen, MUTTMENU *menu, int num) 425 444 { 426 snprintf (s, slen, "%2d %c %s", 427 num + 1, 428 ((struct folder_file *) menu->data)[num].tagged ? '*' : ' ', 429 ((struct folder_file *) menu->data)[num].desc); 445 FOLDER folder; 446 447 folder.ff = &((struct folder_file *) menu->data)[num]; 448 folder.num = num; 449 450 mutt_FormatString (s, slen, NONULL(FolderFormat), folder_format_str, 451 (unsigned long) &folder, M_FORMAT_ARROWCURSOR); 430 452 } 431 453
